1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2020 CEA/DEN, EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author : Anthony Geay (EDF R&D)
22 from MEDLoader import *
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
31 if sys.version_info.major < 3:
32 import cPickle as pickle
36 class StdOutRedirect(object):
37 def __init__(self,fileName):
40 self.stdoutOld=os.dup(2)
41 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42 fd2=os.dup2(self.fdOfSinkFile,2)
43 self.origPyVal=sys.stderr
44 class FlushFile(object):
53 return self.f.isatty()
57 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
61 sys.stderr=self.origPyVal
63 os.dup2(self.stdoutOld,2)
64 os.close(self.stdoutOld)
66 class MEDLoaderTest3(unittest.TestCase):
68 def testMEDMesh1(self):
69 GeneratePyfile18(self)
70 fileName="Pyfile18.med"
71 mname="ExampleOfMultiDimW"
72 medmesh=MEDFileMesh.New(fileName,mname)
73 self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75 m1_0=medmesh.getLevel0Mesh(True)
76 m1_1=ReadUMeshFromFile(fileName,mname,0)
77 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78 m2_0=medmesh.getLevelM1Mesh(True)
79 m2_1=ReadUMeshFromFile(fileName,mname,-1)
80 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
84 def testMEDMesh2(self):
85 GeneratePyfile10(self)
86 fileName="Pyfile10.med"
88 outFileName="MEDFileMesh1.med"
89 medmesh=MEDFileUMesh.New(fileName,mname)
90 self.assertEqual((0,),medmesh.getNonEmptyLevels())
91 m1_0=medmesh.getLevel0Mesh(True)
92 m1_1=ReadUMeshFromFile(fileName,mname,0)
93 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94 g1_0=medmesh.getGroup(0,"mesh2",True)
95 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97 g1_0=medmesh.getGroup(0,"mesh3",True)
98 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102 g1_1.setName(g1_0.getName())
103 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104 g1_0=medmesh.getFamily(0,"Family_-3",True)
105 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107 g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109 g1_1.setName(g1_0.getName())
110 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112 medmesh.write(outFileName,2);
113 self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114 self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115 self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116 self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117 famn=medmesh.getFamilyNameGivenId(0)
118 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
120 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
127 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
129 def testMEDMesh3(self):
130 outFileName="MEDFileMesh3.med"
131 c=DataArrayDouble.New()
132 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134 c.setValues(coords,9,2)
135 m=MEDCouplingUMesh.New();
136 m.setMeshDimension(2);
138 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143 m.finishInsertingCells();
145 m.checkConsistencyLight()
146 m1=MEDCouplingUMesh.New();
147 m1.setMeshDimension(1);
149 m1.insertNextCell(NORM_SEG2,2,[1,4])
150 m1.insertNextCell(NORM_SEG2,2,[3,6])
151 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152 m1.finishInsertingCells();
154 m1.checkConsistencyLight()
155 m2=MEDCouplingUMesh.New();
156 m2.setMeshDimension(0);
158 m2.insertNextCell(NORM_POINT1,1,[1])
159 m2.insertNextCell(NORM_POINT1,1,[3])
160 m2.insertNextCell(NORM_POINT1,1,[2])
161 m2.insertNextCell(NORM_POINT1,1,[6])
162 m2.finishInsertingCells();
164 m2.checkConsistencyLight()
166 mm=MEDFileUMesh.New()
167 self.assertTrue(mm.getUnivNameWrStatus())
168 mm.setName("MyFirstMEDCouplingMEDmesh")
169 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
171 mm.setMeshAtLevel(-1,m1);
172 mm.setMeshAtLevel(0,m);
173 mm.setMeshAtLevel(-2,m2);
174 # playing with groups
175 g1_2=DataArrayInt.New()
176 g1_2.setValues([1,3],2,1)
178 g2_2=DataArrayInt.New()
179 g2_2.setValues([1,2,3],3,1)
181 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182 g1_1=DataArrayInt.New()
183 g1_1.setValues([0,1,2],3,1)
185 g2_1=DataArrayInt.New()
186 g2_1.setValues([0,2],2,1)
188 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189 g1_N=DataArrayInt.New()
190 g1_N.setValues(list(range(8)),8,1)
192 g2_N=DataArrayInt.New()
193 g2_N.setValues(list(range(9)),9,1)
195 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196 mm.createGroupOnAll(0,"GrpOnAllCell")
197 # check content of mm
198 t=mm.getGroupArr(0,"G1",False)
199 self.assertTrue(g1_2.isEqual(t));
200 t=mm.getGroupArr(0,"G2",False)
201 self.assertTrue(g2_2.isEqual(t));
202 t=mm.getGroupArr(-1,"G1",False)
203 self.assertTrue(g1_1.isEqual(t));
204 t=mm.getGroupArr(-1,"G2",False)
205 self.assertTrue(g2_1.isEqual(t));
206 t=mm.getGroupArr(1,"G1",False)
207 self.assertTrue(g1_N.isEqual(t));
208 t=mm.getGroupArr(1,"G2",False)
209 self.assertTrue(g2_N.isEqual(t));
210 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211 t=mm.getGroupArr(0,"GrpOnAllCell")
212 self.assertTrue(t.getValues()==list(range(5)))
215 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216 mmCpy.write(outFileName,2);
218 mm=MEDFileMesh.New(outFileName)
220 self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221 self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222 self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223 mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224 self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225 self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226 self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227 lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228 self.assertEqual(3,len(lmm))
229 self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230 self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231 self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
233 self.assertTrue(mm.getUnivNameWrStatus())
234 self.assertTrue(isinstance(mm.getUnivName(),str))
235 self.assertTrue(len(mm.getUnivName())!=0)
236 mbis=mm.getMeshAtLevel(0)
237 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238 self.assertTrue(m.isEqual(mbis,1e-12));
240 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
243 # this test is the testMEDMesh3 except that permutation is dealed here
245 def testMEDMesh4(self):
246 outFileName="MEDFileMesh4.med"
247 c=DataArrayDouble.New()
248 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250 c.setValues(coords,9,2)
251 c.setInfoOnComponent(0,"abcdef [km]")
252 c.setInfoOnComponent(1,"ghij [MW]")
253 m=MEDCouplingUMesh.New();
254 m.setMeshDimension(2);
256 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261 m.finishInsertingCells();
263 m.checkConsistencyLight()
264 m1=MEDCouplingUMesh.New();
265 m1.setMeshDimension(1);
267 m1.insertNextCell(NORM_SEG2,2,[1,4])
268 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269 m1.insertNextCell(NORM_SEG2,2,[3,6])
270 m1.finishInsertingCells();
272 m1.checkConsistencyLight()
273 m2=MEDCouplingUMesh.New();
274 m2.setMeshDimension(0);
276 m2.insertNextCell(NORM_POINT1,1,[1])
277 m2.insertNextCell(NORM_POINT1,1,[3])
278 m2.insertNextCell(NORM_POINT1,1,[2])
279 m2.insertNextCell(NORM_POINT1,1,[6])
280 m2.finishInsertingCells();
282 m2.checkConsistencyLight()
284 mm=MEDFileUMesh.New()
285 mm.setName("My2ndMEDCouplingMEDmesh")
286 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
288 renumNode=DataArrayInt.New()
289 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290 mm.setRenumFieldArr(1,renumNode)
292 mm.setMeshAtLevel(-1,m1,True);
293 mm.setMeshAtLevel(0,m,True);
294 mm.setMeshAtLevel(-2,m2,True);
295 mm.removeMeshAtLevel(-2)
296 mm.setMeshAtLevel(-2,m2,True);
297 # playing with groups
298 g1_2=DataArrayInt.New()
299 g1_2.setValues([2,3],2,1)
301 g2_2=DataArrayInt.New()
302 g2_2.setValues([2,0,3],3,1)
304 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305 g1_1=DataArrayInt.New()
306 g1_1.setValues([0,2,1],3,1)
308 g2_1=DataArrayInt.New()
309 g2_1.setValues([0,2],2,1)
311 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312 g1_N=DataArrayInt.New()
313 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
315 g2_N=DataArrayInt.New()
316 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
318 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319 # check content of mm
320 t=mm.getGroupArr(0,"G1",True)
321 self.assertTrue(g1_2.isEqual(t));
322 t=mm.getGroupArr(0,"G2",True)
323 self.assertTrue(g2_2.isEqual(t));
324 t=mm.getGroupArr(-1,"G1",True)
325 self.assertTrue(g1_1.isEqual(t));
326 t=mm.getGroupArr(-1,"G2",True)
327 self.assertTrue(g2_1.isEqual(t));
328 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
330 mm.write(outFileName,2);
331 mm2=MEDFileMesh.New(outFileName)
332 res=mm.isEqual(mm2,1e-12)
333 self.assertTrue(res[0])
334 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336 mm2.keepFamIdsOnlyOnLevs([3],[-1])
337 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
340 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
343 self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345 self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346 self.assertTrue(not mm2.existsFamily("Family_-8"))
347 mm2.createGroupOnAll(-1,"GrpOnAllFace")
348 self.assertTrue(mm2.existsFamily("Family_-8"))
349 self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
352 #testing persistence of retrieved arrays
354 def testMEDMesh5(self):
355 GeneratePyfile18(self)
356 fileName="Pyfile18.med"
357 mname="ExampleOfMultiDimW"
358 medmesh=MEDFileUMesh.New(fileName,mname)
359 m1_0=medmesh.getLevel0Mesh(True)
360 da1=medmesh.getFamilyFieldAtLevel(0)
362 self.assertEqual(20,m1_0.getNumberOfCells())
363 self.assertEqual(20,da1.getNumberOfTuples())
366 def internalMEDMesh6(self):
367 outFileName="MEDFileMesh5.med"
370 m1=MEDCouplingCMesh.New();
371 da=DataArrayDouble.New()
372 da.setValues([0.,1.,2.],3,1)
373 da.setInfoOnComponent(0,"XX [mm]")
375 da=DataArrayDouble.New()
376 da.setValues([0.,1.2],2,1)
377 da.setInfoOnComponent(0,"YY [km]")
379 da=DataArrayDouble.New()
380 da.setValues([0.,1.3],2,1)
381 da.setInfoOnComponent(0,"ZZ [um]")
384 self.assertTrue(m[0].isEqual(m1,1e-12))
385 self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386 m.setName("myFirstCartMesh")
387 m.setDescription("mmmmpppppppp")
390 da=DataArrayInt.New()
391 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392 m.setFamilyFieldArr(1,da)
393 m.setFamilyId("family1",1)
394 da=m.getFamilyArr(1,"family1")
396 self.assertEqual(expected1,da.getValues())
397 self.assertTrue(m.getUnivNameWrStatus())
398 m.write(outFileName,2);
399 mm=MEDFileMesh.New(outFileName)
400 self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401 self.assertTrue(isinstance(mm,MEDFileCMesh))
402 self.assertTrue(isinstance(mm.getUnivName(),str))
403 self.assertTrue(len(mm.getUnivName())!=0)
404 self.assertTrue(m.isEqual(mm,1e-12)[0])
405 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
408 m1.setTime(tt[2],tt[0],tt[1])
409 m1.setName(m.getName())
410 m1.setTimeUnit(m.getTimeUnit())
411 m1.setDescription(m.getDescription())
412 self.assertTrue(m2.isEqual(m1,1e-12));
415 def testMEDMesh6(self):
416 self.internalMEDMesh6()
420 def testMEDMesh7(self):
421 fileName="Pyfile24.med"
422 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
424 m.setCoords(m2.getCoords())
425 m.setMeshAtLevel(0,m2)
426 m.setMeshAtLevel(-1,m1)
427 m.setMeshAtLevel(-2,m0)
428 m.setFamilyFieldArr(0,f2)
429 m.setFamilyFieldArr(-1,f1)
430 m.setFamilyFieldArr(-2,f0)
431 m.setFamilyFieldArr(1,p)
432 m.setRenumFieldArr(0,n2)
433 m.setRenumFieldArr(-1,n1)
434 m.setRenumFieldArr(-2,n0)
436 for i in range(nbOfFams):
437 m.addFamily(fns[i],fids[i])
440 for i in range(nbOfGrps):
441 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
443 m.setName(m2.getName())
444 m.setDescription(m2.getDescription())
446 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
457 self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
460 def funcToTestDelItem(self,ff):
464 #emulation of pointe.med file.
466 def testMEDField1(self):
467 TestMultiFieldShuffleRW1(self)
468 mm=MEDFileMesh.New("Pyfile17.med")
469 mm.write("Pyfile17_bis.med",2)
470 ff=MEDFileFieldMultiTS("Pyfile17.med")
471 tsExpected=[[1,2],[3,4],[5,6]]
472 self.assertEqual(3,len(ff))
473 for pos,f1ts in enumerate(ff):
474 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475 self.assertEqual(type(f1ts),MEDFileField1TS)
477 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478 self.assertEqual([3,4],ff[1].getTime()[:-1])
479 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481 ff.write("Pyfile17_bis.med",0)
483 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484 self.assertEqual([(1,2),(3,4),(5,6)],ts)
485 self.funcToTestDelItem(ff)
486 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487 self.assertEqual([(1,2)],ts)
492 def testMEDField2(self):
493 GeneratePyfile19(self)
494 mm=MEDFileMesh.New("Pyfile19.med")
495 mm.write("Pyfile19_bis.med",2)
496 ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497 ff.write("Pyfile19_bis.med",0)
498 self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
503 def testMEDField3(self):
504 GeneratePyfile13(self)
505 mm=MEDFileMesh.New("Pyfile13.med")
506 mm.write("Pyfile13_bis.med",2)
507 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508 ff.write("Pyfile13_bis.med",0)
509 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511 f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513 ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514 f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516 ff4=MEDFileField1TS.New("Pyfile13.med")
517 f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518 self.assertTrue(f.isEqual(f4,1e-12,1e-12))
523 def testMEDField4(self):
524 GeneratePyfile14(self)
525 mm=MEDFileMesh.New("Pyfile14.med")
526 mm.write("Pyfile14_bis.med",2)
527 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528 ff.write("Pyfile14_bis.med",0)
529 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531 f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
535 # MEDField get/set on pointe.med
537 def testMEDField5(self):
538 TestMultiFieldShuffleRW1(self)
539 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540 f=ff.getFieldAtLevel(ON_CELLS,0)
541 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546 # no with renumbering
547 f=ff.getFieldAtLevel(ON_CELLS,0,1)
548 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550 f=ff.getFieldAtLevel(ON_CELLS,0,3)
551 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552 f=ff.getFieldAtLevel(ON_CELLS,0,2)
553 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
558 # MEDField get/set on profiles nodes
560 def testMEDField6(self):
561 GeneratePyfile7(self)
562 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563 its=ff.getIterations()
564 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566 f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568 GeneratePyfile19(self)
569 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570 its=ff.getIterations()
571 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572 f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
578 # MEDField get/set on profiles cells
580 def testMEDField7(self):
581 GeneratePyfile12(self)
582 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583 its=ff.getIterations()
584 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585 f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
589 #first test of assignation. No profile and types sorted by type.
591 def testMEDField8(self):
593 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
595 mm1=MEDFileUMesh.New()
596 mm1.setCoords(m1.getCoords())
597 mm1.setMeshAtLevel(0,m1)
598 mm1.setName(m1.getName())
600 ff1=MEDFileField1TS.New()
601 ff1.setFieldNoProfileSBT(f1)
603 f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604 itt,orr,ti=ff1.getTime()
605 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
608 itt,orr,ti=ff1.getTime()
609 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
611 ff1.copyTimeInfoFrom(f1)
612 itt,orr,ti=ff1.getTime()
613 self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614 da,infos=ff1.getUndergroundDataArrayExt()
615 f2.getArray().setName(da.getName())#da has the same name than f2
616 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
620 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
622 mm1=MEDFileUMesh.New()
623 mm1.setCoords(m1.getCoords())
624 mm1.setMeshAtLevel(0,m1)
625 mm1.setName(m1.getName())
627 ff1=MEDFileField1TS.New()
628 ff1.setFieldNoProfileSBT(f1)
630 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
632 f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634 f1.getArray().setIJ(0,0,nv)
635 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
638 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
640 mm1=MEDFileUMesh.New()
641 mm1.setCoords(m1.getCoords())
642 mm1.setMeshAtLevel(0,m1)
643 mm1.setName(m1.getName())
645 ff1=MEDFileField1TS.New()
646 ff1.setFieldNoProfileSBT(f1)
648 f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650 da,infos=ff1.getUndergroundDataArrayExt()
651 f2.getArray().setName(da.getName())#da has the same name than f2
652 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
656 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657 f1InvalidCpy=f1.deepCopy()
658 f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659 f1InvalidCpy2=f1.deepCopy()
660 f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
662 mm1=MEDFileUMesh.New()
663 mm1.setCoords(m1.getCoords())
664 mm1.setMeshAtLevel(0,m1)
665 mm1.setName(m1.getName())
667 ff1=MEDFileField1TS.New()
668 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669 f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671 ff1.setFieldNoProfileSBT(f1)
673 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676 sbt=ff2.getFieldSplitedByType2()
677 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680 self.assertEqual(6,loc1.getNumberOfPointsInCells())
681 self.assertEqual(3,loc1.getNumberOfGaussPoints())
682 self.assertEqual(2,loc1.getDimension())
683 da,infos=ff2.getUndergroundDataArrayExt()
684 f2.getArray().setName(da.getName())#da has the same name than f2
685 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686 self.assertEqual(53,da.getNumberOfTuples())
687 self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
692 def testMEDFileData1(self):
696 m1=MEDLoaderDataForTest.build1DMesh_1()
697 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698 mmm1=MEDFileMeshMultiTS.New() ;
699 mmm1.setOneTimeStep(mm1)
700 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
705 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706 self.assertEqual(name,mmm.getName())
707 self.assertEqual(type(mmm),MEDFileUMesh)
709 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
711 ff1=MEDFileFieldMultiTS.New()
712 ff21=MEDFileFieldMultiTS.New()
713 ff22=MEDFileFieldMultiTS.New()
714 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715 f1.getArray().setInfoOnComponent(0,"power [kW]")
716 ff1.appendFieldNoProfileSBT(f1)
717 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719 ff21.appendFieldNoProfileSBT(f21)
720 f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723 ff22.appendFieldNoProfileSBT(f22)
724 fs=MEDFileFields.New()
725 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726 for name,fmts in zip(["f1","f21","f22"],fs):
727 self.assertEqual(name,fmts.getName())
731 fname2="Pyfile29_2.med"
734 d2=MEDFileData.New(fname2)
735 self.assertEqual(2,d2.getNumberOfMeshes())
736 self.assertEqual(3,d2.getNumberOfFields())
737 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741 self.assertTrue(m1.isEqual(m1bis,1e-12))
742 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
750 def testMEDField9(self):
751 # first test field profile WR. Full type but with some type missing
753 m1=MEDLoaderDataForTest.build2DMesh_3()
754 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
756 ff1=MEDFileField1TS.New()
757 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
762 ff1.setFieldProfile(f1,mm1,0,da)
763 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
767 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769 self.assertTrue(vals.isEqual(d,1e-14))
771 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773 ff2.deepCpyGlobs(ff3)
774 sbt=ff2.getFieldSplitedByType2()
775 self.assertEqual(3,sbt[0][0])#TRI3
776 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779 self.assertEqual(4,sbt[1][0])#QUAD4
780 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786 self.assertTrue(vals.isEqual(d,1e-14))
790 def testMEDField10(self):
792 m1=MEDLoaderDataForTest.build2DMesh_1()
793 m1.renumberCells([0,1,4,2,3,5],False)
794 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
796 ff1=MEDFileFieldMultiTS.New()
797 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
802 ff1.appendFieldProfile(f1,mm1,0,da)
803 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804 ff1.appendFieldProfile(f1,mm1,0,da)
808 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810 self.assertTrue(vals.isEqual(e,1e-14))
811 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813 self.assertTrue(vals.isEqual(d,1e-14))
815 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819 self.assertTrue(vals.isEqual(e,1e-14))
820 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822 self.assertTrue(vals.isEqual(d,1e-14))
825 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
827 def testMEDField11(self):
829 m1=MEDLoaderDataForTest.build2DMesh_1()
830 m1.renumberCells([0,1,4,2,3,5],False)
831 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
833 ff1=MEDFileField1TS.New()
834 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
839 ff1.setFieldProfile(f1,mm1,0,da)
840 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
843 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845 self.assertTrue(vals.isEqual(d,1e-14))
847 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850 self.assertTrue(vals.isEqual(d,1e-14))
854 def testMEDField12(self):
856 m1=MEDLoaderDataForTest.build2DMesh_1()
857 m1.renumberCells([0,1,4,2,3,5],False)
858 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
860 ff1=MEDFileFieldMultiTS.New()
861 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
866 ff1.appendFieldProfile(f1,mm1,0,da)
867 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868 ff1.appendFieldProfile(f1,mm1,0,da)
871 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873 self.assertTrue(vals.isEqual(e,1e-14))
874 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876 self.assertTrue(vals.isEqual(d,1e-14))
878 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881 self.assertTrue(vals.isEqual(e,1e-14))
882 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884 self.assertTrue(vals.isEqual(d,1e-14))
888 def testMEDField13(self):
890 m1=MEDLoaderDataForTest.build2DMesh_1()
891 m1.renumberCells([0,1,4,2,3,5],False)
893 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
896 ff1=MEDFileField1TS.New()
897 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
902 ff1.setFieldProfile(f1,mm1,0,da)
905 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907 self.assertTrue(vals.isEqual(d,1e-14))
909 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912 self.assertTrue(vals.isEqual(d,1e-14))
916 def testMEDField14(self):
918 m1=MEDLoaderDataForTest.build2DMesh_1()
919 m1.renumberCells([0,1,4,2,3,5],False)
921 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
924 ff1=MEDFileFieldMultiTS.New()
925 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
930 ff1.appendFieldProfile(f1,mm1,0,da)
931 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932 ff1.appendFieldProfile(f1,mm1,0,da)
935 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937 self.assertTrue(vals.isEqual(d,1e-14))
938 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940 self.assertTrue(vals.isEqual(e,1e-14))
941 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
943 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946 self.assertTrue(vals.isEqual(d,1e-14))
947 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949 self.assertTrue(vals.isEqual(e,1e-14))
951 # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952 # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953 # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
955 def testMEDField15(self):
957 m0=MEDLoaderDataForTest.build2DMesh_1()
958 m0.renumberCells([0,1,4,2,3,5],False)
960 m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962 ff1=MEDFileField1TS.New()
963 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
968 ff1.setFieldProfile(f1,mm1,0,da)
969 m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
972 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974 self.assertTrue(p1.isIota(5))
975 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
977 # Test for getFieldAtTopLevel method
979 def testMEDField16(self):
981 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
983 mm1=MEDFileUMesh.New()
984 mm1.setCoords(m1.getCoords())
985 mm1.setMeshAtLevel(0,m1)
986 mm1.setName(m1.getName())
987 ff1=MEDFileField1TS.New()
988 ff1.setFieldNoProfileSBT(f1)
989 m2=m1.buildDescendingConnectivity()[0]
990 m2.sortCellsInMEDFileFrmt()
991 m2.setName(m1.getName())
992 mm1.setMeshAtLevel(-1,m2)
994 f2=m2.getMeasureField(True)
995 dd=DataArrayDouble.New()
996 dd.alloc(f2.getArray().getNumberOfTuples(),3)
997 dd[:,0]=f2.getArray()
998 dd[:,1]=2*f2.getArray()
999 dd[:,2]=3*f2.getArray()
1000 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1002 f2.copyTinyStringsFrom(f1)
1003 f2.copyTinyAttrFrom(f1)
1004 ff1.setFieldNoProfileSBT(f2)
1006 # Reading Pyfile37.med
1007 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1015 fname="Pyfile38.med"
1017 ff1=MEDFileField1TS.New()
1018 ff1.setFieldNoProfileSBT(f2)
1020 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1025 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1027 def testMEDField17(self):
1028 fname="Pyfile39.med"
1029 m1=MEDLoaderDataForTest.build2DMesh_1()
1030 m1.renumberCells([0,1,4,2,3,5],False)
1031 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1033 ffs=MEDFileFields.New()
1034 ff1=MEDFileFieldMultiTS.New()
1035 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1040 ff1.appendFieldProfile(f1,mm1,0,da)
1041 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042 ff1.appendFieldProfile(f1,mm1,0,da)
1044 ffs.setFieldAtPos(0,ff1)
1048 ffsr=MEDFileFields.New(fname)
1049 ff3=ffsr.getFieldAtPos(0)
1050 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1054 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1056 def testMEDField18(self):
1057 fname="Pyfile40.med"
1058 m1=MEDLoaderDataForTest.build2DMesh_1()
1059 m1.renumberCells([0,1,4,2,3,5],False)
1060 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1062 ffs=MEDFileFields.New()
1063 ff1=MEDFileFieldMultiTS.New()
1064 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1069 ff1.appendFieldProfile(f1,mm1,0,da)
1070 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071 ff1.appendFieldProfile(f1,mm1,0,da)
1075 ffsr=MEDFileFields.New(fname)
1076 ff3=ffsr.getFieldAtPos(0)
1077 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1082 def testMEDFieldBug1(self):
1083 GeneratePyfile13(self)
1084 fname="Pyfile13.med"
1085 d=MEDFileData.New(fname)
1086 self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1090 def testMEDMesh8(self):
1091 m=MEDLoaderDataForTest.build1DMesh_1()
1092 m.convertQuadraticCellsToLinear()
1093 mm=MEDFileUMesh.New()
1094 mm.setMeshAtLevel(0,m)
1095 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098 mm.setGroupsAtLevel(0,[g1,g2],False)
1099 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100 self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101 self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102 self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103 mm.assignFamilyNameWithGroupName()
1104 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1109 mm=MEDFileUMesh.New()
1110 mm.setMeshAtLevel(0,m)
1111 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123 mm.changeFamilyId(5,6)
1124 g=mm.getGroupArr(0,"g3")
1125 self.assertTrue(g.isEqual(g3));
1126 g=mm.getGroupArr(0,"g2")
1127 self.assertTrue(g.isEqual(g2));
1128 g=mm.getGroupArr(0,"g1")
1129 self.assertTrue(g.isEqual(g1));
1132 # bug detected by gauthier
1134 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135 fname="Pyfile41.med"
1136 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1138 mm1=MEDFileUMesh.New()
1139 mm1.setCoords(m1.getCoords())
1140 mm1.setMeshAtLevel(0,m1)
1142 ff1=MEDFileField1TS.New()
1143 ff1.setFieldNoProfileSBT(f1)
1145 # writing mesh1 and field1, now creation of mesh2 and field2
1148 m2.translate([0.5,0.6,0.7])
1149 m2.setName("3DSurfMesh_2")
1150 f2.getArray()[:]*=2.
1151 f2.setName("VectorFieldOnCells2")
1152 mm2=MEDFileUMesh.New()
1153 mm2.setCoords(m2.getCoords())
1154 mm2.setMeshAtLevel(0,m2)
1156 ff2=MEDFileField1TS.New()
1157 ff2.setFieldNoProfileSBT(f2)
1160 f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162 f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1167 def testMEDLoaderMultiLevelCellField1(self):
1168 fname="Pyfile42.med"
1169 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170 m=MEDFileUMesh.New()
1171 m.setCoords(m2.getCoords())
1172 m.setMeshAtLevel(0,m2)
1173 m.setMeshAtLevel(-1,m1)
1174 m.setMeshAtLevel(-2,m0)
1178 compNames1=["comp1","comp2","comp3"]
1179 ff1=MEDFileField1TS.New()
1180 da2=DataArrayDouble.New()
1181 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1183 da2.rearrange(len(compNames1))
1184 da2.setInfoOnComponents(compNames1)
1185 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186 ff1.setFieldNoProfileSBT(f2)
1187 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188 da0=DataArrayDouble.New()
1189 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1191 da0.rearrange(len(compNames1))
1192 da0.setInfoOnComponents(compNames1)
1193 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194 ff1.setFieldNoProfileSBT(f0)
1195 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196 da1=DataArrayDouble.New()
1197 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1199 da1.rearrange(len(compNames1))
1200 da1.setInfoOnComponents(compNames1)
1201 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202 ff1.setFieldNoProfileSBT(f1)
1203 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1208 compNames2=["comp11","comp22"]
1209 ff2=MEDFileField1TS.New()
1210 da0=DataArrayDouble.New()
1211 da0.alloc(m0.getNumberOfCells()*2,1)
1214 da0.setInfoOnComponents(compNames2)
1215 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216 ff2.setFieldNoProfileSBT(f0)
1217 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218 da1=DataArrayDouble.New()
1219 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1221 da1.rearrange(len(compNames2))
1222 da1.setInfoOnComponents(compNames2)
1223 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224 ff2.setFieldNoProfileSBT(f1)
1225 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1229 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1238 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239 fname="Pyfile43.med"
1240 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241 m=MEDFileUMesh.New()
1242 m.setMeshAtLevel(0,m2)
1243 m.setMeshAtLevel(-1,m1)
1244 m.setMeshAtLevel(-2,m0)
1245 f=MEDFileField1TS.New()
1246 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247 ff.setName("NodeFieldPfl")
1248 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1250 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251 f.setFieldProfile(ff,m,-2,pfl)
1252 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261 expected1=[1.,10.,100.,2.,20.,200.]
1262 nodeCoordsWithValue1=[10.,2.5,0.]
1263 nodeCoordsWithValue2=[10.,3.75,0.]
1265 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1269 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1273 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1283 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1288 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289 f=MEDFileField1TS.New()
1290 f.setFieldProfile(ff,m,-2,pfl)
1291 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300 expected2=[2.,20.,200.,1.,10.,100.]
1302 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1306 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1309 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1319 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1324 def testBuildInnerBoundaryAlongM1Group1(self):
1325 fname="Pyfile44.med"
1326 m=MEDCouplingCMesh.New()
1327 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332 m2.setName(m.getName())
1333 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335 mm=MEDFileUMesh.New()
1336 mm.setMeshAtLevel(0,m)
1337 mm.setMeshAtLevel(-1,m2)
1338 mm.setGroupsAtLevel(-1,[grp,grp2])
1339 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340 mm.setGroupsAtLevel(1,[grpNode])
1341 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1345 self.assertEqual(30,mm.getNumberOfNodes())
1346 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1349 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350 self.assertEqual([15,16,17],nodes.getValues());
1351 self.assertEqual([7,8,9],cells.getValues());
1352 self.assertEqual([12,13,14],cells2.getValues());
1353 self.assertEqual(33,mm.getNumberOfNodes())
1354 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1366 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1375 def testBuildInnerBoundaryAlongM1Group2(self):
1376 fname="Pyfile45.med"
1377 m=MEDCouplingCMesh.New()
1378 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383 m2.setName(m.getName())
1384 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386 mm=MEDFileUMesh.New()
1387 mm.setMeshAtLevel(0,m)
1388 mm.setMeshAtLevel(-1,m2)
1389 mm.setGroupsAtLevel(-1,[grp,grp2])
1390 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391 mm.setGroupsAtLevel(1,[grpNode])
1392 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393 ref1=[4,9,8,14,15,4,10,9,15,16]
1394 ref2=[4,9,8,14,30,4,10,9,30,16]
1396 self.assertEqual(30,mm.getNumberOfNodes())
1397 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1400 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401 self.assertEqual([15],nodes.getValues());
1402 self.assertEqual([7,8],cells.getValues());
1403 self.assertEqual([12,13],cells2.getValues());
1404 self.assertEqual(31,mm.getNumberOfNodes())
1405 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1417 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1426 def testBuildInnerBoundaryAlongM1Group3(self):
1427 """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428 fname = "Pyfile73.med"
1429 m = MEDCouplingCMesh.New()
1430 m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431 m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432 m = m.buildUnstructured(); m.setName("simple")
1433 m2 = m.buildDescendingConnectivity()[0]
1434 m2.setName(m.getName())
1436 # A crack in two non connected parts of the mesh:
1437 grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1439 mm = MEDFileUMesh.New()
1440 mm.setMeshAtLevel(0,m)
1441 mm.setMeshAtLevel(-1,m2)
1442 mm.setGroupsAtLevel(-1,[grpSeg])
1443 nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444 self.assertEqual([1,13],nodes.getValues());
1445 self.assertEqual([0,6],cellsMod.getValues());
1446 self.assertEqual([1,7],cellsNotMod.getValues());
1447 self.assertEqual(17,mm.getNumberOfNodes())
1448 self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449 self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450 ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451 ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1457 refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459 self.assertTrue(delta.getMaxValue()[0]<1e-10)
1461 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463 refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1465 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1469 def testBuildInnerBoundaryAlongM1Group4(self):
1470 """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1472 coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473 0.,1., 1.,1., 2.,1., 3.,1.,
1474 0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475 conn = [3,0,4,1, 3,1,4,5,
1482 connI = DataArrayInt()
1483 connI.alloc(13, 1); connI.iota(); connI *= 4
1484 m2 = MEDCouplingUMesh("2D", 2)
1486 m2.setConnectivity(DataArrayInt(conn), connI)
1487 m2.checkConsistency()
1488 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489 grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490 grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491 mfu = MEDFileUMesh()
1492 mfu.setMeshAtLevel(0, m2)
1493 mfu.setMeshAtLevel(-1, m1)
1494 mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495 nNod = m2.getNumberOfNodes()
1496 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497 m2_bis = mfu.getMeshAtLevel(0)
1498 m2_bis.checkConsistency()
1499 m1_bis = mfu.getMeshAtLevel(-1)
1500 m1_bis.checkConsistency()
1501 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504 self.assertEqual([6,7], nodesDup.getValues())
1505 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506 self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507 self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508 self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509 self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510 self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511 # mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1512 ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1513 ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1514 self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1515 self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1516 self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1517 mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1518 m_bis0 = mfu.getMeshAtLevel(-1)
1519 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1520 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1523 def testBuildInnerBoundary5(self):
1524 """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1525 of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1526 coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1527 200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1528 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1529 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1530 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1531 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1532 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1533 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1534 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1535 97.16750463405486, 97.18018457127863], 46, 3)
1536 c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1537 39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1538 21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1539 14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1540 17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1541 24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1542 44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1543 44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1544 29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1545 21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1547 cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1548 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1549 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1550 m3 = MEDCouplingUMesh("3D", 3)
1552 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1553 m3.checkConsistency()
1554 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1555 grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1556 mfu = MEDFileUMesh()
1557 mfu.setMeshAtLevel(0, m3)
1558 mfu.setMeshAtLevel(-1, m2)
1559 grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1560 mfu.setGroupsAtLevel(0, [grpIds3D]) # just to check preservation of 3D group
1561 mfu.setGroupsAtLevel(-1, [grpIds])
1562 nNod = m3.getNumberOfNodes()
1563 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1564 m3_bis = mfu.getMeshAtLevel(0)
1565 m3_bis.checkConsistency()
1566 m2_bis = mfu.getMeshAtLevel(-1)
1567 m2_bis.checkConsistency()
1568 self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1569 self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1570 self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1571 self.assertEqual([3], nodesDup.getValues())
1572 self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1573 self.assertEqual(set([22]), set(cells1.getValues()))
1574 self.assertEqual(set([77]), set(cells2.getValues()))
1575 self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1576 self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1577 self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1578 m_bis0 = mfu.getMeshAtLevel(-1)
1579 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1580 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1584 def testBasicConstructors(self):
1585 GeneratePyfile18(self)
1586 fname="Pyfile18.med"
1587 TestWriteUMeshesRW1(self)
1588 m=MEDFileMesh.New(fname)
1589 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1590 m=MEDFileMesh.New(fname)
1591 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1592 m=MEDFileUMesh(fname)
1594 self.internalMEDMesh6()
1595 m=MEDFileCMesh("MEDFileMesh5.med")
1596 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1598 m=MEDFileMeshMultiTS()
1599 m=MEDFileMeshMultiTS(fname)
1600 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1602 m=MEDFileMeshes(fname)
1604 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1605 m=MEDFileFieldMultiTS()
1606 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1608 m=MEDFileFields(fname)
1610 m=MEDFileData(fname)
1612 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1613 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1614 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1615 m=MEDCouplingCMesh()
1616 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1617 m=MEDCouplingFieldTemplate(ON_NODES)
1618 m=MEDCouplingMultiFields([])
1619 m=MEDCouplingFieldOverTime([])
1622 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1624 def testBugSemiPartialField(self):
1625 fname="Pyfile46.med"
1626 m=MEDLoaderDataForTest.build2DMesh_3()
1627 m=m[:10] ; m.setName("mesh")
1628 f=m.getMeasureField(False)
1629 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1631 f.setName("SemiPartialField")
1633 f1=f[:6] ; f1.getMesh().setName(m.getName())
1634 f2=f[6:] ; f2.getMesh().setName(m.getName())
1636 mm=MEDFileUMesh.New()
1637 mm.setMeshAtLevel(0,m)
1638 ff=MEDFileField1TS.New()
1639 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1643 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1644 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1645 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1647 fread.checkConsistencyLight()
1648 fread2.checkConsistencyLight()
1649 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1650 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1654 def testUnPolyze1(self):
1655 fname="Pyfile47.med"
1656 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1657 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]
1658 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1659 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]]))
1661 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1662 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1663 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1664 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1665 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1666 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1667 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1668 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1670 mm.setRenumFieldArr(0,None)
1671 mm.setFamilyFieldArr(-1,None)
1675 def testUnPolyze2(self):
1676 fname="Pyfile48.med"
1677 mfd=MEDFileData.New()
1678 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1679 meshes=MEDFileMeshes.New()
1681 mfd.setMeshes(meshes)
1682 fields=MEDFileFields.New()
1683 mfd.setFields(fields)
1684 ff=MEDFileFieldMultiTS.New()
1685 fields.pushField(ff)
1687 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1688 f0_0.setTime(9.5,3,4)
1689 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1691 f0_0.setMesh(mm.getMeshAtLevel(0))
1692 ff.appendFieldNoProfileSBT(f0_0)
1693 ff0=ff.getTimeStepAtPos(0)
1694 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1695 f0_1.setTime(9.5,3,4)
1696 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1697 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1698 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1700 ff0.setFieldProfile(f0_1,mm,0,pfl)
1701 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1702 f0_2.setTime(9.5,3,4)
1703 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1704 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
1705 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1707 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1708 mfd.getFields().shallowCpyGlobs(ff0)
1710 mfd.unPolyzeMeshes()
1712 fmts=mfd.getFields()[0]
1713 self.assertEqual(fmts.getNumberOfTS(),1)
1714 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1715 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1716 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))])
1717 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1718 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1719 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1720 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1721 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1722 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1723 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1724 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))
1725 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1726 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1727 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1728 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1729 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1730 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])
1731 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1732 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1733 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1734 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])
1735 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1741 def testGaussWriteOnPfl1(self):
1742 fname="Pyfile49.med"
1743 fname2="Pyfile50.med"
1744 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1745 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1746 mQ8.allocateCells(1)
1747 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1748 mQ8.finishInsertingCells()
1749 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1750 mQ4.allocateCells(1)
1751 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1752 mQ4.finishInsertingCells()
1753 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1754 mT3.allocateCells(1)
1755 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1756 mT3.finishInsertingCells()
1758 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.]]
1759 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1760 ms[:]=(elt.deepCopy() for elt in ms)
1761 for m,t in zip(ms,tr):
1762 d=m.getCoords() ; d+= t
1764 m=MEDCouplingUMesh.MergeUMeshes(ms)
1766 m2=m[:13] ; m2.setName(m.getName())
1767 ### 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.
1768 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1769 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1772 da=DataArrayDouble(34) ; da.iota(3.)
1774 f.setName("fieldCellOnPflWithoutPfl")
1775 fInvalid=f.deepCopy()
1776 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])
1777 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])
1778 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])
1779 f.checkConsistencyLight()
1780 fInvalid2=fInvalid.deepCopy()
1781 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1784 mm.setMeshAtLevel(0,m)
1787 f1ts=MEDFileField1TS.New()
1788 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1789 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1790 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1791 f1ts.setFieldProfile(f,mm,0,pfl)
1794 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1795 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1796 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1797 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1798 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1799 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1800 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1801 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1803 dataRead=MEDFileData.New(fname)
1804 mRead=dataRead.getMeshes()[0]
1805 f1tsRead=dataRead.getFields()[0][0]
1806 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1807 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1808 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1809 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1810 f2_bis.checkConsistencyLight()
1811 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1813 WriteField(fname2,f,True)
1814 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1815 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1816 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1817 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1818 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1819 m2=m[pfl] ; m2.setName(m.getName())
1822 da=DataArrayDouble(35) ; da.iota(3.)
1824 f.setName("fieldCellOnPflWithoutPfl2")
1825 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1826 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])
1827 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])
1828 f.checkConsistencyLight()
1831 mm.setMeshAtLevel(0,m)
1833 f1ts=MEDFileField1TS.New()
1834 f1ts.setFieldProfile(f,mm,0,pfl)
1835 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1836 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1837 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1838 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1840 dataRead=MEDFileData.New(fname)
1841 mRead=dataRead.getMeshes()[0]
1842 f1tsRead=dataRead.getFields()[0][0]
1843 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1844 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1845 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1846 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1847 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1848 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1849 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1851 WriteField(fname2,f,True)
1852 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1853 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1854 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1855 ## Use case 3 : no pfl but creation of pfls due to gauss pts
1856 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1859 da=DataArrayDouble(60) ; da.iota(3.)
1861 f.setName("fieldCellWithoutPfl")
1862 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])
1863 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])
1864 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])
1865 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])
1866 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])
1867 f.checkConsistencyLight()
1869 mm.setMeshAtLevel(0,m)
1870 f1ts=MEDFileField1TS.New()
1871 f1ts.setFieldNoProfileSBT(f)
1872 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1873 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1874 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1875 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1876 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1880 dataRead=MEDFileData.New(fname)
1881 mRead=dataRead.getMeshes()[0]
1882 f1tsRead=dataRead.getFields()[0][0]
1883 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1884 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1885 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1886 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1887 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1888 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1890 WriteField(fname2,f,True)
1891 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1892 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1893 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1896 # Testing profile on nodes when the profile is identity but not on all nodes.
1898 def testMEDFieldPflOnNode1(self):
1899 fname="Pyfile51.med"
1900 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)
1901 m0=MEDCouplingUMesh("Mesh",2)
1903 m0.insertNextCell(NORM_TRI3,[1,4,2])
1904 m0.insertNextCell(NORM_TRI3,[4,5,2])
1905 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1906 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1907 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1908 m0.finishInsertingCells()
1910 m1=MEDCouplingUMesh(m0.getName(),1)
1912 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1914 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1916 m1.finishInsertingCells()
1920 m.setMeshAtLevel(0,m0)
1921 m.setMeshAtLevel(-1,m1)
1923 dt=3 ; it=2 ; tim=4.5
1924 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1925 fieldNode0.setName("fieldNode0")
1926 fieldNode0.setTime(tim,dt,it)
1927 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1928 arr=DataArrayDouble([10,11,12,13,14])
1929 fieldNode0.setArray(arr)
1930 f0=MEDFileField1TS()
1931 f0.setFieldProfile(fieldNode0,m,0,pfl0)
1932 m.write(fname,2) ; f0.write(fname,0)
1933 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1934 fieldNode1.setName("fieldNode1")
1935 fieldNode1.setTime(tim,dt,it)
1936 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1937 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1938 fieldNode1.setArray(arr1)
1939 f1=MEDFileField1TS()
1940 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1943 ## Reading from file
1944 m=MEDFileMesh.New(fname)
1945 m0=m.getMeshAtLevel(0)
1946 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1947 fieldNode0.setMesh(m00)
1948 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1949 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1950 ff0_1.checkConsistencyLight()
1951 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1952 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1953 ff0_2.checkConsistencyLight()
1954 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1955 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1956 ff0_3.checkConsistencyLight()
1957 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1958 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1959 ff0_4.checkConsistencyLight()
1960 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1961 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1962 m1=m.getMeshAtLevel(-1)
1963 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1964 fieldNode1.setMesh(m10)
1965 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1966 ff1_1.checkConsistencyLight()
1967 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1968 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1969 ff1_2.checkConsistencyLight()
1970 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1971 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1972 ff1_3.checkConsistencyLight()
1973 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1974 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1975 ff1_4.checkConsistencyLight()
1976 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1977 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]
1978 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]
1979 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]
1980 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1981 arr_r.setName(fieldNode1.getArray().getName())
1982 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1983 pfl1_r.setName(pfl1.getName())
1984 self.assertTrue(pfl1_r.isEqual(pfl1))
1987 # Testing profile on nodes when the profile is identity but not on all nodes.
1989 def testMEDFieldPflOnCell1(self):
1990 fname="Pyfile52.med"
1991 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)
1992 m0=MEDCouplingUMesh("Mesh",2)
1994 m0.insertNextCell(NORM_TRI3,[1,4,2])
1995 m0.insertNextCell(NORM_TRI3,[4,5,2])
1996 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1997 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1998 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1999 m0.finishInsertingCells()
2001 m1=MEDCouplingUMesh(m0.getName(),1)
2003 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2005 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2007 m1.finishInsertingCells()
2011 m.setMeshAtLevel(0,m0)
2012 m.setMeshAtLevel(-1,m1)
2014 dt=3 ; it=2 ; tim=4.5
2015 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2016 fieldCell0.setName("fieldCell0")
2017 fieldCell0.setTime(tim,dt,it)
2018 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2019 arr=DataArrayDouble([10,11,12])
2020 fieldCell0.setArray(arr)
2021 f0=MEDFileField1TS()
2022 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2023 m.write(fname,2) ; f0.write(fname,0)
2024 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2025 fieldCell1.setName("fieldCell1")
2026 fieldCell1.setTime(tim,dt,it)
2027 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2028 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2029 fieldCell1.setArray(arr1)
2030 f1=MEDFileField1TS()
2031 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2034 ## Reading from file
2035 m=MEDFileMesh.New(fname)
2036 m0=m.getMeshAtLevel(0)
2037 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2038 fieldCell0.setMesh(m00)
2039 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2040 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2041 ff0_1.checkConsistencyLight()
2042 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2043 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2044 ff0_2.checkConsistencyLight()
2045 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2046 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2047 ff0_3.checkConsistencyLight()
2048 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2049 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2050 ff0_4.checkConsistencyLight()
2051 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2052 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2053 m1=m.getMeshAtLevel(-1)
2054 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2055 fieldCell1.setMesh(m10)
2056 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2057 ff1_1.checkConsistencyLight()
2058 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2059 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2060 ff1_2.checkConsistencyLight()
2061 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2062 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2063 ff1_3.checkConsistencyLight()
2064 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2065 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2066 ff1_4.checkConsistencyLight()
2067 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2068 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]
2069 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]
2070 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]
2071 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2072 arr_r.setName(fieldCell1.getArray().getName())
2073 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2074 pfl1_r.setName(pfl1.getName())
2075 self.assertTrue(pfl1_r.isEqual(pfl1))
2079 def testMEDFileUMeshZipCoords1(self):
2081 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2082 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])
2083 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2084 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2085 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2086 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2087 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2088 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2089 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2090 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2091 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2092 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2094 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2095 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2096 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2097 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2098 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2099 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2100 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2101 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2102 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2106 def testMEDUMeshAddNodeGroup1(self):
2107 fname="Pyfile53.med"
2109 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2110 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])
2111 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2112 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2113 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2114 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2115 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2118 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2119 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2120 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2121 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2122 mm.setFamilyId("MyFam",2)
2123 mm.setFamilyId("MyOtherFam",3)
2124 mm.setFamilyId("MyOther-1",-1)
2125 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2126 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2128 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2130 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2131 mm.addNodeGroup(daTest)
2132 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2133 self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2135 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2136 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2138 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2139 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2140 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2141 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2143 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2144 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2145 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2146 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2147 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2148 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2150 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2151 da=DataArrayInt([3,12]) ; da.setName("grp0")
2152 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2154 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2156 mm=MEDFileMesh.New(fname)
2157 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2158 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2159 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2160 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2162 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2163 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2164 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2165 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2166 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2167 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2169 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2170 da=DataArrayInt([3,12]) ; da.setName("grp0")
2171 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2173 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2177 def testMEDUMeshAddGroup1(self):
2178 fname="Pyfile54.med"
2180 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2181 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2183 m0.insertNextCell(NORM_TRI3,[1,2,1])
2186 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2189 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2191 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2192 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2193 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2194 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2195 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2198 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2199 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2200 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2201 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2202 mm.setFamilyId("MyFam",2)
2203 mm.setFamilyId("MyOtherFam",3)
2204 mm.setFamilyId("MyOther-1",-1)
2205 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2206 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2208 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2209 mm.addGroup(0,daTest)
2210 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2211 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2212 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2213 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2215 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2216 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2217 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2218 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2219 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2220 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2222 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2223 da=DataArrayInt([3,12]) ; da.setName("grp0")
2224 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2226 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2228 mm=MEDFileMesh.New(fname)
2229 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2230 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2231 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2232 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2234 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2235 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2236 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2237 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2238 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2239 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2241 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2242 da=DataArrayInt([3,12]) ; da.setName("grp0")
2243 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2245 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2249 def testHeapMem1(self):
2250 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2252 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2254 m=MEDCouplingCMesh()
2255 arr=DataArrayDouble(10,1) ; arr.iota(0)
2256 m.setCoords(arr,arr)
2257 m=m.buildUnstructured()
2259 f=m.getMeasureField(False)
2260 cooMem = 100 * 2 * 8
2261 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2262 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2263 meshMem = cooMem + nodalMem + indexMem
2264 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2265 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2266 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2269 mm.setMeshAtLevel(0,m)
2270 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2271 ff=MEDFileField1TS()
2272 ff.setFieldNoProfileSBT(f)
2273 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2275 fff=MEDFileFieldMultiTS()
2276 fff.appendFieldNoProfileSBT(f)
2277 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2279 fff.appendFieldNoProfileSBT(f)
2280 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2281 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2284 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2285 fff.appendFieldProfile(f2,mm,0,pfl)
2286 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2287 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2288 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2291 def internalCurveLinearMesh1(self):
2292 fname="Pyfile55.med"
2293 mesh=MEDCouplingCurveLinearMesh();
2294 mesh.setTime(2.3,4,5);
2295 mesh.setTimeUnit("us");
2296 mesh.setName("Example of Cuve linear mesh");
2297 mesh.setDescription("buildCLMesh");
2298 a1=DataArrayDouble(3*20,1);
2299 a1.iota(7.) ; a1.rearrange(3);
2301 mesh.setNodeGridStructure([4,5]);
2302 mesh.checkConsistencyLight();
2304 m=MEDFileCurveLinearMesh()
2306 d=DataArrayInt(20) ; d.iota(4)
2307 m.setFamilyFieldArr(1,d)
2308 d3=DataArrayInt(20) ; d3.iota(400)
2309 m.setRenumFieldArr(1,d3)
2310 d2=DataArrayInt(12) ; d2.iota(40)
2311 m.setFamilyFieldArr(0,d2)
2312 d4=DataArrayInt(21) ; d4.iota(4000)
2313 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2315 m.setRenumFieldArr(1,d4)
2318 m1=MEDFileCurveLinearMesh(fname)
2320 self.assertTrue(mm.isEqual(mesh,1e-12))
2321 self.assertEqual(mm.getSpaceDimension(),3)
2322 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2324 m1=MEDFileMesh.New(fname)
2325 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2326 self.assertTrue(isinstance(m1.getUnivName(),str))
2327 self.assertTrue(len(m1.getUnivName())!=0)
2328 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2332 def testCurveLinearMesh1(self):
2333 self.internalCurveLinearMesh1()
2336 def testParameters1(self):
2337 self.internalParameters1()
2339 def internalParameters1(self):
2340 fname="Pyfile56.med"
2341 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2342 mm=MEDFileCMesh() ; mm.setMesh(m)
2343 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2345 p=MEDFileParameters()
2346 data.setParams(p) ; data.setMeshes(ms)
2347 pts=MEDFileParameterMultiTS()
2348 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2349 pts.appendValue(1,2,3.4,567.89)
2350 pts.appendValue(2,3,5.6,999.123)
2351 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2352 p.pushParam(pts) ; p.pushParam(pts2)
2354 p2=MEDFileParameters(fname)
2355 self.assertTrue(p.isEqual(p2,1e-14)[0])
2356 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2358 pts4=pts2.deepCopy()
2359 pts3=pts2.deepCopy()
2360 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2361 pts2.eraseTimeStepIds([0])
2362 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2364 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2365 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2366 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2367 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2368 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2370 self.assertTrue(p.isEqual(p2,1e-14)[0])
2371 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2372 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2373 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2374 self.assertEqual(p.getParamsNames(),('A','B'))
2375 ptsr=MEDFileParameterMultiTS(fname,"B")
2376 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2377 ptsr=MEDFileParameterMultiTS(fname)
2378 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2379 p1tsr=MEDFileParameterDouble1TS(fname)
2380 self.assertEqual(p1tsr.getName(),"A")
2381 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2382 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2383 self.assertEqual(p1tsr.getName(),"B")
2384 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2385 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2386 self.assertEqual(p1tsr.getName(),"B")
2387 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2388 data2=MEDFileData(fname)
2389 self.assertEqual(2,data2.getNumberOfParams())
2390 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2394 def testNamesOnCellAndNodesInMeshes1(self):
2395 fname="Pyfile58.med"
2396 fname2="Pyfile59.med"
2397 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2398 m1=m.buildDescendingConnectivity()[0]
2399 m1.sortCellsInMEDFileFrmt()
2402 mm.setMeshAtLevel(0,m)
2403 mm.setMeshAtLevel(-1,m1)
2404 namesCellL0=DataArrayAsciiChar(6,16)
2405 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2406 mm.setNameFieldAtLevel(0,namesCellL0)
2407 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2408 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2409 mm.setNameFieldAtLevel(-1,namesCellL1)
2410 namesNodes=namesCellL1.subArray(4,16)
2411 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2412 mm.setNameFieldAtLevel(1,namesNodes)
2415 mmr=MEDFileMesh.New(fname)
2416 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2417 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2418 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2419 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2420 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2421 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2422 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2423 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2425 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2426 # remove names on nodes
2427 mmCpy.setNameFieldAtLevel(1,None)
2428 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2429 mm.setNameFieldAtLevel(1,None)
2430 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2431 mm.setNameFieldAtLevel(-1,None)
2433 mmr=MEDFileMesh.New(fname)
2434 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2435 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2436 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2438 c=MEDCouplingCMesh()
2439 arr=DataArrayDouble([0.,1.1,2.3])
2440 c.setCoords(arr,arr)
2444 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2445 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2447 ccr=MEDFileMesh.New(fname2)
2448 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2449 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2450 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2451 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2452 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2453 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2454 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2456 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2460 def testToExportInExamples1(self):
2461 m=MEDCouplingCMesh()
2462 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2463 m.setCoords(arr,arr)
2464 m=m.buildUnstructured() ; m.setName("mesh")
2465 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2466 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2469 mm.setMeshAtLevel(0,m)
2470 mm.setMeshAtLevel(-1,m2)
2471 mm.setGroupsAtLevel(0,[grp1,grp2])
2472 mm.write("example.med",2)
2474 m0=mm.getMeshAtLevel(0)
2475 m1=mm.getMeshAtLevel(-1)
2476 grp1=mm.getGroupArr(0,"grp1")
2477 grp2=mm.getGroupArr(0,"grp2")
2479 whichGrp=DataArrayInt(m0.getNumberOfCells())
2480 whichGrp.fillWithValue(-1)
2481 for grpId,grp in enumerate(grps):
2484 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2485 e,f=a.areCellsIncludedIn(m1,2)
2487 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2488 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2489 c2.transformWithIndArr(whichGrp)
2490 splitOfM1=len(grps)*[None]
2491 for grpId,grp in enumerate(grps):
2492 tmp=c2.findIdsEqual(grpId)
2493 splitOfM1[grpId]=tmp
2495 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2496 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2500 def testBugCorrection1(self):
2503 self.assertEqual(fs[0],None)
2504 self.assertEqual(3,len(fs))
2508 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2509 f1Name="Pyfile60.med"
2510 f2Name="Pyfile61.med"
2511 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2513 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2515 # reading and compare
2516 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2517 for mn in d1.getMeshes().getMeshesNames():
2518 m1=d1.getMeshes()[mn]
2519 m2=d2.getMeshes()[mn]
2520 for lev in m1.getNonEmptyLevels():
2521 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2522 for grpName in grpsNames:
2523 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2527 for fieldn in d1.getFields().getFieldsNames():
2528 f1=d1.getFields()[fieldn]
2529 f2=d2.getFields()[fieldn]
2530 for it,order,tim in f1.getTimeSteps():
2533 if len(f1t.getPflsReallyUsed())!=0:
2535 for lev in f1t.getNonEmptyLevels()[1]:
2536 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2537 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2538 self.assertTrue(pfl1.isEqual(pfl2))
2539 self.assertTrue(arr1.isEqual(arr2,1e-10))
2544 for lev in f1t.getNonEmptyLevels()[1]:
2545 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2546 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2547 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2555 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2556 m=MEDCouplingCMesh()
2557 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2558 m.setCoords(arr,arr,arr)
2559 m=m.buildUnstructured()
2560 m2=m.buildDescendingConnectivity()[0]
2562 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2563 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2564 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2565 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2566 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2567 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2569 mm.setMeshAtLevel(0,m)
2570 mm.setGroupsAtLevel(0,[g1,g2])
2571 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2572 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2573 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2574 mm.normalizeFamIdsMEDFile()
2575 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2576 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2577 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2578 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2579 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2580 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2581 for g in mm.getGroupsOnSpecifiedLev(0):
2582 for f in mm.getFamiliesIdsOnGroup(g):
2583 self.assertTrue(f<0)
2588 mm.setMeshAtLevel(0,m)
2589 mm.setMeshAtLevel(-1,m2)
2590 mm.setGroupsAtLevel(0,[g1,g2])
2591 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2592 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2593 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2594 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2595 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2596 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2597 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2598 mm.normalizeFamIdsMEDFile()
2599 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2600 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2601 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2602 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2603 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2604 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2605 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2606 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2607 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2608 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2609 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2610 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2612 for g in mm.getGroupsOnSpecifiedLev(lev):
2613 for f in mm.getFamiliesIdsOnGroup(g):
2614 self.assertTrue(f<0)
2620 mm.setMeshAtLevel(0,m)
2621 mm.setMeshAtLevel(-1,m2)
2622 mm.setGroupsAtLevel(0,[g1,g2])
2623 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2624 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2625 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2626 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2627 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2628 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2629 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2630 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2631 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2632 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2633 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2634 mm.normalizeFamIdsMEDFile()
2635 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2636 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2637 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2638 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2639 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2640 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2641 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2642 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2643 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2644 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2645 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2646 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2647 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2648 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2649 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2650 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2651 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2652 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2654 for g in mm.getGroupsOnSpecifiedLev(lev):
2655 for f in mm.getFamiliesIdsOnGroup(g):
2656 self.assertTrue(f<0)
2660 for g in mm.getGroupsOnSpecifiedLev(1):
2661 for f in mm.getFamiliesIdsOnGroup(g):
2662 self.assertTrue(f>0)
2668 def testNonRegressionMantis22212ChangeGrpName(self):
2669 fileName="Pyfile62.med"
2670 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2671 m=MEDFileUMesh.New()
2672 m.setCoords(m2.getCoords())
2673 m.setMeshAtLevel(0,m2)
2674 m.setMeshAtLevel(-1,m1)
2675 m.setMeshAtLevel(-2,m0)
2676 m.setFamilyFieldArr(0,f2)
2677 m.setFamilyFieldArr(-1,f1)
2678 m.setFamilyFieldArr(-2,f0)
2679 m.setFamilyFieldArr(1,p)
2681 for i in range(nbOfFams):
2682 m.addFamily(fns[i],fids[i])
2685 for i in range(nbOfGrps):
2686 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2688 m.setName(m2.getName())
2689 m.setDescription(m2.getDescription())
2692 mm0=MEDFileMesh.New(fileName)
2693 mm1=MEDFileMesh.New(fileName)
2694 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2695 for name in groupNamesIni:
2696 mm1.changeGroupName(name,name+'N')
2698 mm1.write(fileName,2)
2701 mm2=MEDFileMesh.New(fileName)
2702 for name in groupNamesIni:
2703 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2704 arr0=mm0.getGroupArr(lev,name)
2705 arr2=mm2.getGroupArr(lev,name+'N')
2706 arr0.setName(name+'N')
2707 self.assertTrue(arr0.isEqual(arr2))
2713 def testInt32InMEDFileFieldStar1(self):
2714 self.internalInt32InMEDFileFieldStar1()
2716 def internalInt32InMEDFileFieldStar1(self):
2717 fname="Pyfile63.med"
2718 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2719 f1=f1.convertToIntField()
2721 mm1=MEDFileUMesh.New()
2722 mm1.setCoords(m1.getCoords())
2723 mm1.setMeshAtLevel(0,m1)
2724 mm1.setName(m1.getName())
2726 ff1=MEDFileIntField1TS()
2727 ff1.setFieldNoProfileSBT(f1)
2728 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2729 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2730 self.assertTrue(a.isEqual(f1,1e-12,0))
2732 a,b=ff1.getUndergroundDataArrayExt()
2733 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2734 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2735 ff2=MEDFileAnyTypeField1TS.New(fname)
2736 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2737 self.assertEqual(ff2.getTime(),[0,1,2.0])
2738 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2739 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2740 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2741 self.assertTrue(a.isEqual(f1,1e-12,0))
2743 c=ff2.getUndergroundDataArray() ; c*=2
2744 ff2.write(fname,0) # 2 time steps in
2745 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2746 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2747 self.assertEqual(len(ffs1),2)
2748 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2749 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2750 self.assertTrue(a.isEqual(f1,1e-12,0))
2751 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2752 self.assertTrue(a.isEqual(f1,1e-12,0))
2753 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2754 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2755 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2756 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2757 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2758 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2760 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2763 self.assertTrue(bc.isEqual(3*f1.getArray()))
2764 nf1=MEDCouplingFieldInt(ON_NODES)
2765 nf1.setTime(9.,10,-1)
2766 nf1.setMesh(f1.getMesh())
2767 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2768 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2769 nff1=MEDFileIntField1TS.New()
2770 nff1.setFieldNoProfileSBT(nf1)
2771 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2772 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2775 nf2=MEDCouplingFieldInt(ON_NODES)
2776 nf2.setTime(19.,20,-11)
2777 nf2.setMesh(f1.getMesh())
2778 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2779 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2780 nff2=MEDFileIntField1TS.New()
2781 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2782 nff2.setFieldProfile(nf2,mm1,0,npfl)
2783 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2784 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2785 self.assertTrue(b.isEqual(npfl))
2786 self.assertTrue(a.isEqual(narr2))
2788 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2789 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2790 self.assertTrue(b.isEqual(npfl))
2791 self.assertTrue(a.isEqual(narr2))
2793 nf3=MEDCouplingFieldDouble(ON_NODES)
2794 nf3.setName("VectorFieldOnNodesDouble")
2795 nf3.setTime(29.,30,-21)
2796 nf3.setMesh(f1.getMesh())
2797 nf3.setArray(f1.getMesh().getCoords())
2798 nff3=MEDFileField1TS.New()
2799 nff3.setFieldNoProfileSBT(nf3)
2801 fs=MEDFileFields(fname)
2802 self.assertEqual(len(fs),4)
2803 ffs=[it for it in fs]
2804 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2805 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2806 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2807 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2809 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2810 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2811 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2812 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2813 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2815 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2816 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2817 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2818 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2819 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2820 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2821 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2822 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2824 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2825 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2826 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2827 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2831 def testMEDFileFields1(self):
2832 fname="Pyfile64.med"
2833 f1=MEDCouplingFieldDouble(ON_NODES)
2834 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2835 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2836 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2838 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2840 f1.setName("Field1")
2841 ff1=MEDFileField1TS.New()
2842 ff1.setFieldNoProfileSBT(f1)
2843 self.assertEqual(ff1.getDtUnit(),"us")
2845 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2846 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2848 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2849 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2850 ff1s.setName("Field2")
2852 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2853 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2854 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2855 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2856 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2857 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2858 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2859 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2862 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2864 def testMEDFileFields2(self):
2865 fname="Pyfile65.med"
2866 # to check that all is initialize
2867 MEDFileField1TS().__str__()
2868 MEDFileFieldMultiTS().__str__()
2869 # building a mesh containing 4 tri3 + 5 quad4
2870 tri=MEDCouplingUMesh("tri",2)
2871 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2872 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2873 tris = [tri.deepCopy() for i in range(4)]
2874 for i,elt in enumerate(tris): elt.translate([i,0])
2875 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2876 quad=MEDCouplingUMesh("quad",2)
2877 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2878 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2879 quads = [quad.deepCopy() for i in range(5)]
2880 for i,elt in enumerate(quads): elt.translate([5+i,0])
2881 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2882 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2883 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2885 fmts0_0=MEDFileFieldMultiTS()
2886 fmts0_1=MEDFileFieldMultiTS()
2889 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2890 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2891 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2892 f.setTime(float(i+1)+0.1,i+1,-i-1)
2893 fmts0_0.appendFieldNoProfileSBT(f)
2894 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2895 self.assertEqual(fmts0_1.getName(),name1)
2896 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2897 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2899 # components names have been modified to generate errors
2900 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2901 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2902 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2903 f1ts.setInfo(['aa [bb]','eee [dd]'])
2904 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2906 # add a mismatch of nb of compos
2908 fmts0_2=fmts0_0.deepCopy()
2909 fmts0_3=fmts0_0.deepCopy()
2910 fmts0_4=fmts0_0.deepCopy()
2911 fmts0_5=fmts0_0.shallowCpy()
2912 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)
2914 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2915 del fmts0_3[[1.1,(6,-6),9]]
2916 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2917 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2918 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2919 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2920 fmts0_7=fmts0_4[::-3]
2921 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2922 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2925 fs0.pushField(fmts0_0)
2926 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2927 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2928 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2929 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2931 fs0=MEDFileFields(fname)
2932 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2933 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2934 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2935 del fs1[["2ndField",3]]
2936 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2937 fs2=fs0[[0,"4thField"]]
2938 self.assertTrue(isinstance(fs2,MEDFileFields))
2939 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2941 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2944 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2946 def testMEDFileFields3(self):
2947 fname="Pyfile66.med"
2948 # building a mesh containing 4 tri3 + 5 quad4
2949 tri=MEDCouplingUMesh("tri",2)
2950 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2951 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2952 tris = [tri.deepCopy() for i in range(4)]
2953 for i,elt in enumerate(tris): elt.translate([i,0])
2954 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2955 quad=MEDCouplingUMesh("quad",2)
2956 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2957 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2958 quads = [quad.deepCopy() for i in range(5)]
2959 for i,elt in enumerate(quads): elt.translate([5+i,0])
2960 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2961 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2962 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2964 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2966 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2967 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2968 fmts0_0=MEDFileFieldMultiTS()
2969 fmts0_1=MEDFileFieldMultiTS()
2972 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2973 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2974 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2975 f.setTime(float(i+1)+0.1,i+1,-i-1)
2976 fmts0_0.appendFieldProfile(f,mm,0,pfl)
2977 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2978 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2979 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2982 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2983 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2984 fmts0_0.zipPflsNames()
2985 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2986 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2987 fmts0_2=fmts0_0.deepCopy()
2988 fmts0_3=fmts0_0.deepCopy()
2989 fmts0_4=fmts0_0.deepCopy()
2991 fs0.pushField(fmts0_0)
2992 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2993 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2994 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2995 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2997 fmts0_5=MEDFileFieldMultiTS()
2999 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3000 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3001 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3002 f.setTime(float(i+1)+0.1,i+1,-i-1)
3003 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3005 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3006 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3007 fs0.checkGlobsCoherency()
3012 def testSplitComponents1(self):
3013 fname="Pyfile67.med"
3014 # building a mesh containing 4 tri3 + 5 quad4
3015 tri=MEDCouplingUMesh("tri",2)
3016 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3017 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3018 tris = [tri.deepCopy() for i in range(4)]
3019 for i,elt in enumerate(tris): elt.translate([i,0])
3020 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3021 quad=MEDCouplingUMesh("quad",2)
3022 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3023 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3024 quads = [quad.deepCopy() for i in range(5)]
3025 for i,elt in enumerate(quads): elt.translate([5+i,0])
3026 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3027 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3028 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3030 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3032 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3033 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3035 fmts0_1=MEDFileFieldMultiTS()
3037 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3040 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3041 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3042 f.setTime(float(i+1)+0.1,i+1,-i-1)
3043 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3044 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3046 fs.pushField(fmts0_1)
3047 self.assertEqual(1,len(fs))
3048 l=fmts0_1.splitComponents()
3049 self.assertEqual(3,len(l))
3050 for elt in l: self.assertEqual(10,len(elt))
3051 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3053 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3056 self.assertEqual(4,len(fs))
3057 for elt in fs: self.assertEqual(10,len(elt))
3058 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3059 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3061 fs.write(fname,0) ; del fs
3063 fs1=MEDFileFields(fname)
3064 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3065 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3066 self.assertEqual(4,len(fs1))
3068 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3069 f1ts=fs1[fieldName][i]
3070 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3071 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3072 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3074 f1ts=fs1["1stField"][i]
3075 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3076 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3077 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3082 def testMEDFileFieldConvertTo1(self):
3083 fname="Pyfile68.med"
3084 # building a mesh containing 4 tri3 + 5 quad4
3085 tri=MEDCouplingUMesh("tri",2)
3086 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3087 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3088 tris = [tri.deepCopy() for i in range(4)]
3089 for i,elt in enumerate(tris): elt.translate([i,0])
3090 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3091 quad=MEDCouplingUMesh("quad",2)
3092 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3093 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3094 quads = [quad.deepCopy() for i in range(5)]
3095 for i,elt in enumerate(quads): elt.translate([5+i,0])
3096 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3097 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3098 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3099 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3101 ff0=MEDFileField1TS()
3102 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")
3103 f0.checkConsistencyLight()
3104 ff0.setFieldNoProfileSBT(f0)
3106 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3107 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3109 ff0i=ff0.convertToInt()
3110 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3111 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3113 ff1=ff0i.convertToDouble()
3114 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3115 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3117 del arr,f0,ff0,ff1,ff0i,fspExp
3118 ff0=MEDFileField1TS()
3119 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")
3120 f0.checkConsistencyLight()
3121 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3122 ff0.setFieldProfile(f0,mm,0,pfl)
3123 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3124 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3126 ff0i=ff0.convertToInt()
3127 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3128 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3129 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3131 ff1=ff0i.convertToDouble()
3132 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3133 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3134 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3136 ff0=MEDFileFieldMultiTS()
3137 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)
3138 f0.checkConsistencyLight()
3139 ff0.appendFieldProfile(f0,mm,0,pfl)
3140 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)
3141 f0.checkConsistencyLight()
3142 ff0.appendFieldProfile(f0,mm,0,pfl)
3143 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)
3144 f0.checkConsistencyLight()
3145 ff0.appendFieldProfile(f0,mm,0,pfl)
3146 ff1=ff0.convertToInt()
3147 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3148 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3149 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3150 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3151 arr=ff1.getUndergroundDataArray(dt,it)
3152 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3154 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3159 ff1=ff1.convertToDouble()
3160 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3161 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3162 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3163 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3164 arr=ff1.getUndergroundDataArray(dt,it)
3165 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3167 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3169 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3170 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3171 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3172 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3173 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3174 arr=ff1.getUndergroundDataArray(dt,it)
3175 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3177 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3181 def testMEDFileFieldPartialLoading(self):
3182 fname="Pyfile69.med"
3184 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3186 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3187 # building a mesh containing 30 tri3 + 40 quad4
3188 tri=MEDCouplingUMesh("tri",2)
3189 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3190 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3191 tris = [tri.deepCopy() for i in range(30)]
3192 for i,elt in enumerate(tris): elt.translate([i,0])
3193 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3194 quad=MEDCouplingUMesh("quad",2)
3195 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3196 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3197 quads = [quad.deepCopy() for i in range(40)]
3198 for i,elt in enumerate(quads): elt.translate([40+i,0])
3199 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3200 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3201 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3202 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3204 ff0=MEDFileField1TS()
3205 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")
3206 f0.checkConsistencyLight()
3207 ff0.setFieldNoProfileSBT(f0)
3210 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3211 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3213 ff0=MEDFileField1TS()
3214 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")
3215 f0.checkConsistencyLight()
3216 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3217 ff0.setFieldProfile(f0,mm,0,pfl)
3218 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3219 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3222 ff0=MEDFileField1TS(fname,False)
3223 self.assertEqual(ff0.getName(),"FieldCell")
3224 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3225 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3226 heap_memory_ref=ff0.getHeapMemorySize()
3227 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3229 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3230 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3231 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3233 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3234 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3235 heap_memory_ref=ff0.getHeapMemorySize()
3236 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3238 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3239 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3240 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3242 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3243 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3244 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3245 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3247 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3248 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3249 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3250 ff0.loadArraysIfNecessary() ##
3251 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3252 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3253 heap_memory_ref=ff0.getHeapMemorySize()
3254 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3256 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3257 self.assertEqual(hmd,-800) # -50*8*2
3259 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3261 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3262 heap_memory_ref=ff0.getHeapMemorySize()
3263 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3265 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3266 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3268 fieldName="FieldCellMultiTS"
3269 ff0=MEDFileFieldMultiTS()
3271 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)
3272 f0.setTime(float(t)+0.1,t,100+t)
3273 f0.checkConsistencyLight()
3274 ff0.appendFieldNoProfileSBT(f0)
3278 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3279 heap_memory_ref=ff0.getHeapMemorySize()
3280 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3282 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3285 ffs=MEDFileFields(fname,False)
3286 heap_memory_ref=ffs.getHeapMemorySize()
3287 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3289 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3293 def testMEDFileMeshReadSelector1(self):
3294 mrs=MEDFileMeshReadSelector()
3295 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3296 mrs.__str__() ; mrs.__repr__()
3298 mrs=MEDFileMeshReadSelector(0)
3299 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())
3300 mrs=MEDFileMeshReadSelector(1)
3301 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3302 mrs=MEDFileMeshReadSelector(2)
3303 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3304 mrs=MEDFileMeshReadSelector(3)
3305 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3306 mrs=MEDFileMeshReadSelector(4)
3307 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3308 mrs=MEDFileMeshReadSelector(5)
3309 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3310 mrs=MEDFileMeshReadSelector(6)
3311 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3312 mrs=MEDFileMeshReadSelector(7)
3313 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3314 mrs=MEDFileMeshReadSelector(8)
3315 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3316 mrs=MEDFileMeshReadSelector(9)
3317 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3318 mrs=MEDFileMeshReadSelector(10)
3319 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3320 mrs=MEDFileMeshReadSelector(11)
3321 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3322 mrs=MEDFileMeshReadSelector(12)
3323 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3324 mrs=MEDFileMeshReadSelector(13)
3325 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3326 mrs=MEDFileMeshReadSelector(14)
3327 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3328 mrs=MEDFileMeshReadSelector(15)
3329 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3330 mrs=MEDFileMeshReadSelector(16)
3331 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3332 mrs=MEDFileMeshReadSelector(17)
3333 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3334 mrs=MEDFileMeshReadSelector(18)
3335 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3336 mrs=MEDFileMeshReadSelector(19)
3337 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3338 mrs=MEDFileMeshReadSelector(20)
3339 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3340 mrs=MEDFileMeshReadSelector(21)
3341 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3342 mrs=MEDFileMeshReadSelector(22)
3343 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3344 mrs=MEDFileMeshReadSelector(23)
3345 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3346 mrs=MEDFileMeshReadSelector(24)
3347 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3348 mrs=MEDFileMeshReadSelector(25)
3349 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3350 mrs=MEDFileMeshReadSelector(26)
3351 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3352 mrs=MEDFileMeshReadSelector(27)
3353 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3354 mrs=MEDFileMeshReadSelector(28)
3355 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3356 mrs=MEDFileMeshReadSelector(29)
3357 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3358 mrs=MEDFileMeshReadSelector(30)
3359 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3360 mrs=MEDFileMeshReadSelector(31)
3361 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3362 mrs=MEDFileMeshReadSelector(32)
3363 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3364 mrs=MEDFileMeshReadSelector(33)
3365 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3366 mrs=MEDFileMeshReadSelector(34)
3367 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3368 mrs=MEDFileMeshReadSelector(35)
3369 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3370 mrs=MEDFileMeshReadSelector(36)
3371 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3372 mrs=MEDFileMeshReadSelector(37)
3373 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3374 mrs=MEDFileMeshReadSelector(38)
3375 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3376 mrs=MEDFileMeshReadSelector(39)
3377 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3378 mrs=MEDFileMeshReadSelector(40)
3379 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3380 mrs=MEDFileMeshReadSelector(41)
3381 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3382 mrs=MEDFileMeshReadSelector(42)
3383 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3384 mrs=MEDFileMeshReadSelector(43)
3385 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3386 mrs=MEDFileMeshReadSelector(44)
3387 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3388 mrs=MEDFileMeshReadSelector(45)
3389 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3390 mrs=MEDFileMeshReadSelector(46)
3391 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3392 mrs=MEDFileMeshReadSelector(47)
3393 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3394 mrs=MEDFileMeshReadSelector(48)
3395 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3396 mrs=MEDFileMeshReadSelector(49)
3397 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3398 mrs=MEDFileMeshReadSelector(50)
3399 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3400 mrs=MEDFileMeshReadSelector(51)
3401 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3402 mrs=MEDFileMeshReadSelector(52)
3403 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3404 mrs=MEDFileMeshReadSelector(53)
3405 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3406 mrs=MEDFileMeshReadSelector(54)
3407 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3408 mrs=MEDFileMeshReadSelector(55)
3409 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3410 mrs=MEDFileMeshReadSelector(56)
3411 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3412 mrs=MEDFileMeshReadSelector(57)
3413 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3414 mrs=MEDFileMeshReadSelector(58)
3415 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3416 mrs=MEDFileMeshReadSelector(59)
3417 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3418 mrs=MEDFileMeshReadSelector(60)
3419 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3420 mrs=MEDFileMeshReadSelector(61)
3421 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3422 mrs=MEDFileMeshReadSelector(62)
3423 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3424 mrs=MEDFileMeshReadSelector(63)
3425 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3427 mrs=MEDFileMeshReadSelector(63)
3428 mrs.setCellFamilyFieldReading(False)
3429 self.assertEqual(mrs.getCode(),62)
3430 mrs.setCellFamilyFieldReading(True)
3431 self.assertEqual(mrs.getCode(),63)
3432 mrs.setNodeFamilyFieldReading(False)
3433 self.assertEqual(mrs.getCode(),61)
3434 mrs.setNodeFamilyFieldReading(True)
3435 self.assertEqual(mrs.getCode(),63)
3436 mrs.setCellNameFieldReading(False)
3437 self.assertEqual(mrs.getCode(),59)
3438 mrs.setCellNameFieldReading(True)
3439 self.assertEqual(mrs.getCode(),63)
3440 mrs.setNodeNameFieldReading(False)
3441 self.assertEqual(mrs.getCode(),55)
3442 mrs.setNodeNameFieldReading(True)
3443 self.assertEqual(mrs.getCode(),63)
3444 mrs.setCellNumFieldReading(False)
3445 self.assertEqual(mrs.getCode(),47)
3446 mrs.setCellNumFieldReading(True)
3447 self.assertEqual(mrs.getCode(),63)
3448 mrs.setNodeNumFieldReading(False)
3449 self.assertEqual(mrs.getCode(),31)
3450 mrs.setNodeNumFieldReading(True)
3451 self.assertEqual(mrs.getCode(),63)
3455 def testPartialReadOfMeshes(self):
3456 fname="Pyfile70.med"
3457 # building a mesh containing 4 tri3 + 5 quad4
3458 tri=MEDCouplingUMesh("tri",2)
3459 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3460 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3461 tris = [tri.deepCopy() for i in range(4)]
3462 for i,elt in enumerate(tris): elt.translate([i,0])
3463 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3464 quad=MEDCouplingUMesh("quad",2)
3465 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3466 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3467 quads = [quad.deepCopy() for i in range(5)]
3468 for i,elt in enumerate(quads): elt.translate([5+i,0])
3469 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3470 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3471 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3472 m1=m.buildDescendingConnectivity()[0]
3473 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3475 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3476 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3477 mm.setGroupsAtLevel(0,[grp0,grp1])
3478 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3479 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3480 mm.setGroupsAtLevel(-1,[grp2,grp3])
3481 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3482 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3483 mm.setGroupsAtLevel(1,[grp4,grp5])
3484 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3485 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3486 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3490 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3491 b4_ref_heap_mem=mm.getHeapMemorySize()
3492 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3493 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3494 ref_heap_mem=mm.getHeapMemorySize()
3495 # check the gain of memory using 1GTUMesh instead of UMesh
3496 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
3498 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3499 self.assertEqual(len(mm.getGroupsNames()),0)
3500 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3501 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3502 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3503 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3504 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3505 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3506 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3507 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3508 delta1=ref_heap_mem-mm.getHeapMemorySize()
3509 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3511 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3512 self.assertEqual(len(mm.getGroupsNames()),6)
3513 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3514 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3515 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3516 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3517 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3518 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3519 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3520 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3521 delta2=ref_heap_mem-mm.getHeapMemorySize()
3522 self.assertTrue(delta2<delta1)
3523 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3525 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3526 self.assertEqual(len(mm.getGroupsNames()),6)
3527 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3528 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3529 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3530 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3531 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3532 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3533 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3534 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3535 delta3=ref_heap_mem-mm.getHeapMemorySize()
3536 self.assertTrue(delta3<delta2)
3537 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3539 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3540 self.assertEqual(len(mm.getGroupsNames()),6)
3541 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3542 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3543 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3544 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3545 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3546 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3547 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3548 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3549 delta4=ref_heap_mem-mm.getHeapMemorySize()
3550 self.assertTrue(delta4<delta3)
3551 self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3553 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3554 self.assertEqual(len(mm.getGroupsNames()),6)
3555 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3556 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3557 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3558 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3559 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3560 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3561 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3562 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3563 delta5=ref_heap_mem-mm.getHeapMemorySize()
3564 self.assertTrue(delta5<delta4)
3565 self.assertEqual(delta5,0)
3568 # this test checks that setFieldProfile perform a check of the array length
3569 # compared to the profile length. This test also checks that mesh attribute of field
3570 # is not used by setFieldProfile (because across this test mesh is equal to None)
3572 def testCheckCompatibilityPfl1(self):
3573 # building a mesh containing 4 tri3 + 5 quad4
3574 tri=MEDCouplingUMesh("tri",2)
3575 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3576 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3577 tris = [tri.deepCopy() for i in range(4)]
3578 for i,elt in enumerate(tris): elt.translate([i,0])
3579 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3580 quad=MEDCouplingUMesh("quad",2)
3581 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3582 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3583 quads = [quad.deepCopy() for i in range(5)]
3584 for i,elt in enumerate(quads): elt.translate([5+i,0])
3585 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3586 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3587 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3588 m1=m.buildDescendingConnectivity()[0]
3589 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3591 f1ts=MEDFileField1TS()
3592 f=MEDCouplingFieldDouble(ON_NODES)
3593 vals=DataArrayDouble(7) ; vals.iota(1000)
3595 f.setName("anonymous") # f has no mesh it is not a bug
3596 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3597 f1ts.setFieldProfile(f,mm,0,pfl)
3599 f1ts=MEDFileField1TS()
3600 f=MEDCouplingFieldDouble(ON_NODES)
3601 vals=DataArrayDouble(8) ; vals.iota(1000)
3603 f.setName("anonymous") # f has no mesh it is not a bug
3604 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3605 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3607 f1ts=MEDFileField1TS()
3608 f=MEDCouplingFieldDouble(ON_CELLS)
3609 vals=DataArrayDouble(7) ; vals.iota(1000)
3611 f.setName("anonymous") # f has no mesh it is not a bug
3612 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3613 f1ts.setFieldProfile(f,mm,0,pfl)
3614 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3616 f1ts=MEDFileField1TS()
3617 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3618 vals=DataArrayDouble(27) ; vals.iota(1000)
3620 f.setName("anonymous") # f has no mesh it is not a bug
3621 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3623 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])
3624 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3625 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])
3627 f1ts.setFieldProfile(f,mm,0,pfl)
3628 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3629 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3630 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3631 vals=DataArrayDouble(27) ; vals.iota(1000)
3632 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3634 f1ts=MEDFileField1TS()
3635 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3636 vals=DataArrayDouble(25) ; vals.iota(1000)
3638 f.setName("anonymous") # f has no mesh it is not a bug
3639 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3640 f1ts.setFieldProfile(f,mm,0,pfl)
3641 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3642 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3644 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3645 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3647 f1ts=MEDFileField1TS()
3648 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3649 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3651 f1ts.setFieldProfile(f,mm,0,pfl)
3655 def testWRMeshWithNoCells(self):
3656 fname="Pyfile71.med"
3657 a=DataArrayDouble(4) ; a.iota()
3658 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3659 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3661 m.setMeshAtLevel(0,m00)
3662 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3663 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3667 m=MEDFileMesh.New(fname)
3668 self.assertEqual((),m.getNonEmptyLevels())
3669 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))
3670 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3671 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3675 def testWRQPolyg1(self):
3676 fname="Pyfile72.med"
3677 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3678 m.insertNextCell([0,2,1,3])
3679 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3681 ms = [m.deepCopy() for i in range(4)]
3682 for i,elt in enumerate(ms):
3683 elt.translate([float(i)*1.5,0.])
3685 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3686 m0.convertAllToPoly()
3688 ms = [m.deepCopy() for i in range(5)]
3689 for i,elt in enumerate(ms):
3690 elt.translate([float(i)*1.5,1.5])
3692 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3693 m1.convertAllToPoly()
3694 m1.convertLinearCellsToQuadratic()
3696 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3699 mm.setMeshAtLevel(0,m)
3700 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3701 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3702 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3703 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3708 mm_read=MEDFileUMesh(fname)
3709 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3710 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3711 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3712 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3714 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3716 arr0=DataArrayDouble(9) ; arr0.iota()
3717 arr1=DataArrayDouble(9) ; arr1.iota(100)
3718 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3719 f.setArray(arr) ; f.checkConsistencyLight()
3721 ff=MEDFileField1TS()
3722 ff.setFieldNoProfileSBT(f)
3725 ff_read=MEDFileField1TS(fname)
3726 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3727 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3731 def testLoadIfNecessaryOnFromScratchFields0(self):
3733 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3735 fname="Pyfile77.med"
3736 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3737 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3739 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3740 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3741 m.finishInsertingCells()
3743 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3744 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3748 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3749 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3751 f0.setName("myELNOField")
3752 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3753 f0.setArray(arrs[0])
3754 ff0.appendFieldNoProfileSBT(f0)
3757 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3758 f0.setArray(arrs[1])
3759 ff0.appendFieldNoProfileSBT(f0)
3762 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3763 f0.setArray(arrs[2])
3764 ff0.appendFieldNoProfileSBT(f0)
3767 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3768 f0.setArray(arrs[3])
3769 ff0.appendFieldNoProfileSBT(f0)
3771 for i,arr in enumerate(arrs):
3772 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3773 fs[0][i].loadArraysIfNecessary()
3774 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3776 fs.loadArraysIfNecessary()
3777 for i,arr in enumerate(arrs):
3778 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3780 fs[0].loadArraysIfNecessary()
3781 for i,arr in enumerate(arrs):
3782 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3787 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3788 """ 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.
3790 fname="Pyfile78.med"
3791 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)
3792 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3793 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3795 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
3796 m0.insertNextCell(NORM_TETRA4,elt)
3798 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
3799 m0.insertNextCell(NORM_PYRA5,elt)
3801 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
3802 m0.insertNextCell(NORM_PENTA6,elt)
3804 m0.checkConsistency()
3805 m1=MEDCouplingUMesh(); m1.setName("mesh")
3806 m1.setMeshDimension(2);
3807 m1.allocateCells(5);
3808 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3809 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3810 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3811 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3812 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3813 m1.setCoords(coords);
3814 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3816 m3.insertNextCell(NORM_POINT1,[2])
3817 m3.insertNextCell(NORM_POINT1,[3])
3818 m3.insertNextCell(NORM_POINT1,[4])
3819 m3.insertNextCell(NORM_POINT1,[5])
3822 mm.setMeshAtLevel(0,m0)
3823 mm.setMeshAtLevel(-1,m1)
3824 mm.setMeshAtLevel(-3,m3)
3826 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3827 mm=MEDFileMesh.New(fname)
3829 fmts=MEDFileFieldMultiTS()
3830 f1ts=MEDFileField1TS()
3831 for lev in mm.getNonEmptyLevels():
3832 for gt in mm.getGeoTypesAtLevel(lev):
3833 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3834 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3835 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3836 f.setArray(arr) ; f.setName("f0")
3837 f1ts.setFieldNoProfileSBT(f)
3840 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3841 for lev in [0,-1,-3]:
3842 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3844 fmts.pushBackTimeStep(f1ts)
3848 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3849 fs=MEDFileFields(fname)
3850 self.assertEqual(len(fs),1)
3851 self.assertEqual(len(fs[0]),1)
3853 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),'','')])])
3854 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))
3858 def testMEDFileUMeshSetName(self):
3859 """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the conversion is performed in memory and a preparation is done then.
3860 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3862 fname="Pyfile79.med"
3863 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3865 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3866 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)
3867 m0.allocateCells(5);
3868 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3869 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3870 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3871 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3872 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3873 m0.setCoords(coords);
3874 mm.setMeshAtLevel(0,m0)
3875 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3877 m2.insertNextCell(NORM_POINT1,[2])
3878 m2.insertNextCell(NORM_POINT1,[3])
3879 m2.insertNextCell(NORM_POINT1,[4])
3880 m2.insertNextCell(NORM_POINT1,[5])
3881 mm.setMeshAtLevel(-2,m2)
3882 self.assertEqual(mm.getName(),"")
3883 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3884 mm.forceComputationOfParts()
3885 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3887 self.assertEqual(mm.getName(),"abc")
3888 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3889 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3890 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3891 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3895 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3896 fileName="Pyfile80.med"
3897 m=MEDCouplingCMesh() ; m.setName("cmesh")
3898 arr=DataArrayDouble(6) ; arr.iota()
3899 m.setCoords(arr,arr)
3900 nbCells=m.getNumberOfCells()
3901 self.assertEqual(25,nbCells)
3902 f=MEDCouplingFieldDouble(ON_CELLS)
3903 f.setName("FieldOnCell") ; f.setMesh(m)
3904 arr=DataArrayDouble(nbCells) ; arr.iota()
3908 fmts=MEDFileFieldMultiTS()
3910 for i in range(nbCells):
3911 t=(float(i)+0.1,i+1,-i-2)
3913 arr2=DataArrayDouble(nbCells)
3914 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3917 f1ts=MEDFileField1TS()
3918 f1ts.setFieldNoProfileSBT(f)
3919 fmts.pushBackTimeStep(f1ts)
3921 fmts.unloadArraysWithoutDataLoss()
3922 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))
3923 fs=MEDFileFields() ; fs.pushField(fmts)
3924 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))
3925 fs.unloadArraysWithoutDataLoss()
3926 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))
3928 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))
3929 f1ts.unloadArraysWithoutDataLoss()
3930 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))
3931 mm.write(fileName,2)
3932 fs.write(fileName,0)
3933 del m,fmts,mm,f,f1ts
3935 mm=MEDFileMesh.New(fileName)
3936 fmts=MEDFileFieldMultiTS(fileName)
3937 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))
3938 fmts.unloadArraysWithoutDataLoss()
3939 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3940 fmts.loadArraysIfNecessary()
3941 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))
3943 fs=MEDFileFields(fileName)
3944 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))
3945 fs.unloadArraysWithoutDataLoss()
3946 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3947 fs.loadArraysIfNecessary()
3948 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))
3950 f1ts=MEDFileField1TS(fileName)
3951 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))
3952 f1ts.unloadArraysWithoutDataLoss()
3953 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3954 f1ts.loadArraysIfNecessary()
3955 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))
3959 def testMEDFileUMeshLoadPart1(self):
3960 """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specified using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
3961 memory of the returned instance.
3963 fileName="Pyfile81.med"
3964 arr=DataArrayDouble(6) ; arr.iota()
3965 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3966 m=m.buildUnstructured()
3968 m.changeSpaceDimension(3,0.)
3969 infos=["aa [b]","cc [de]","gg [klm]"]
3970 m.getCoords().setInfoOnComponents(infos)
3971 m.checkConsistency()
3973 mm.setMeshAtLevel(0,m)
3974 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
3975 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3976 mm.setMeshAtLevel(-1,m1)
3977 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])
3978 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])
3979 namesCellL0=DataArrayAsciiChar(25,16)
3980 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
3981 renumM1=DataArrayInt([3,4,0,2,1])
3982 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3983 mm.setRenumFieldArr(0,renum0)
3984 mm.setFamilyFieldArr(0,famField0)
3985 mm.setNameFieldAtLevel(0,namesCellL0)
3986 mm.setRenumFieldArr(-1,renumM1)
3987 mm.setFamilyFieldArr(-1,famFieldM1)
3988 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])
3989 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])
3990 namesNodes=DataArrayAsciiChar(36,16)
3991 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
3992 mm.setRenumFieldArr(1,renum1)
3993 mm.setFamilyFieldArr(1,famField1)
3994 mm.setNameFieldAtLevel(1,namesNodes)
3995 mm.setFamilyId("Fam7",77)
3996 mm.setFamilyId("Fam8",88)
3997 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3998 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3999 mm.write(fileName,2)
4001 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4002 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4003 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])))
4004 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)
4005 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4006 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4007 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4008 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4009 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4010 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4011 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4013 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4014 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4015 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])))
4016 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)
4017 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4018 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4019 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4020 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4021 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4022 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4023 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4025 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4026 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4027 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4028 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4029 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4030 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4031 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4032 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4033 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])))
4034 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4035 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)
4036 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4037 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4038 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4039 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4043 def testMEDFileFieldsLoadPart1(self):
4044 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4046 fileName="Pyfile82.med"
4048 compos=["aa [kg]","bbb [m/s]"]
4049 arr=DataArrayDouble(6) ; arr.iota()
4050 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4051 m=m.buildUnstructured()
4053 m.changeSpaceDimension(3,0.)
4054 infos=["aa [b]","cc [de]","gg [klm]"]
4055 m.getCoords().setInfoOnComponents(infos)
4056 m.checkConsistency()
4057 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4059 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4060 arr[:,0]=list(range(25))
4061 arr[:,1]=list(range(100,125))
4063 WriteField(fileName,f,True)
4064 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4065 f.setName("FieldNode")
4066 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4067 arr[:,0]=list(range(200,236))
4068 arr[:,1]=list(range(300,336))
4070 f.checkConsistencyLight()
4071 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4074 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4076 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4077 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4080 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4082 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4084 fs[0][0].loadArrays()
4085 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4086 arr.setInfoOnComponents(compos)
4087 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4088 fs[1][0].loadArrays()
4089 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4090 arr.setInfoOnComponents(compos)
4091 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4095 def testMEDFileWithoutCells1(self):
4096 fileName="Pyfile83.med"
4097 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4098 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4102 mm.write(fileName,2)
4104 mm=MEDFileMesh.New(fileName)
4105 self.assertEqual(mm.getName(),"mesh")
4106 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4110 def testZipCoordsWithLoadPart1(self):
4111 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4113 fileName="Pyfile84.med"
4115 compos=["aa [kg]","bbb [m/s]"]
4116 arr=DataArrayDouble(6) ; arr.iota()
4117 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4118 m=m.buildUnstructured()
4120 m.changeSpaceDimension(3,0.)
4121 infos=["aa [b]","cc [de]","gg [klm]"]
4122 m.getCoords().setInfoOnComponents(infos)
4123 m.checkConsistency()
4124 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4126 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4127 arr[:,0]=list(range(25))
4128 arr[:,1]=list(range(100,125))
4130 WriteField(fileName,f,True)
4131 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4132 f.setName("FieldNode")
4133 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4134 arr[:,0]=list(range(200,236))
4135 arr[:,1]=list(range(300,336))
4137 f.checkConsistencyLight()
4138 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4141 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4143 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4144 self.assertEqual(spd.getSlice(),slice(4,6,1))
4145 spd=mm.getPartDefAtLevel(1)
4146 self.assertEqual(spd.getSlice(),slice(4,14,1))
4147 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4148 mm.zipCoords() # <- The important line is here !
4149 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4150 self.assertEqual(spd.getSlice(),slice(4,6,1))
4151 spd=mm.getPartDefAtLevel(1)
4152 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4153 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4154 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4155 fs[0][0].loadArrays()
4156 arr=DataArrayDouble([(4,104),(5,105)])
4157 arr.setInfoOnComponents(compos)
4158 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4159 fs[1][0].loadArrays()
4160 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4161 arr.setInfoOnComponents(compos)
4162 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4163 m_ref = mm[0].deepCopy()
4164 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4166 mrs = MEDFileMeshReadSelector()
4167 mrs.setNumberOfCoordsLoadSessions(2)
4168 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4170 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4171 self.assertEqual(spd.getSlice(),slice(4,6,1))
4172 spd=mm.getPartDefAtLevel(1)
4173 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4174 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4175 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4176 fs[0][0].loadArrays()
4177 arr=DataArrayDouble([(4,104),(5,105)])
4178 arr.setInfoOnComponents(compos)
4179 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4180 fs[1][0].loadArrays()
4181 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4182 arr.setInfoOnComponents(compos)
4183 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4184 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4188 def testMEDFileCMeshSetGroupsAtLevel(self):
4189 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4191 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4193 mm=MEDFileCMesh() ; mm.setMesh(m)
4194 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4195 mm.setGroupsAtLevel(0,[grp])
4196 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4200 def testMEDFileUMeshBuildExtrudedMesh1(self):
4201 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4202 fileName="Pyfile85.med"
4205 meshName3DOut="Mesh3D"
4207 d1=DataArrayInt([0,4,20,24])
4208 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4210 a=DataArrayDouble(6) ; a.iota()
4211 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4212 m=m.buildUnstructured()
4213 d1c=d1.buildComplement(m.getNumberOfCells())
4214 m=m[d1c] ; m.zipCoords()
4215 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4217 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4218 m.setName(meshName2D)
4219 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4220 e=d.deltaShiftIndex().findIdsEqual(1)
4223 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4224 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4225 mm.setGroupsAtLevel(0,[grp0])
4226 grp1=e ; grp1.setName("grp1")
4227 mm.setGroupsAtLevel(-1,[grp1])
4228 mm.write(fileName,2)
4230 a=DataArrayDouble(3) ; a.iota()
4231 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4232 tmp.setName(meshName1D)
4233 tmp.changeSpaceDimension(3)
4234 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4236 mm1D.setMeshAtLevel(0,tmp)
4237 mm1D.write(fileName,0)
4239 mm2D=MEDFileMesh.New(fileName,meshName2D)
4240 mm1D=MEDFileMesh.New(fileName,meshName1D)
4241 m1D=mm1D.getMeshAtLevel(0)
4242 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4244 self.assertEqual(mm3D.getName(),mm2D.getName())
4245 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4246 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4247 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4248 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4249 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4250 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4251 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4252 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4253 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4254 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.)])
4255 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4256 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])
4257 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4258 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])
4259 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4260 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])
4261 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4262 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])
4263 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4264 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])
4265 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4266 d=DataArrayInt(129) ; d.iota() ; d*=3
4267 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4269 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4270 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4271 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4272 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4273 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])))
4274 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])))
4275 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])))
4276 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])))
4277 mm3D.setName("MeshExtruded")
4278 mm3D.write(fileName,0)
4281 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4283 def testMEDFileUMeshPickeling1(self):
4284 outFileName="Pyfile86.med"
4285 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)
4286 c.setInfoOnComponents(["aa","bbb"])
4287 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4288 m=MEDCouplingUMesh();
4289 m.setMeshDimension(2);
4291 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4292 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4293 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4294 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4295 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4296 m.finishInsertingCells();
4298 m.checkConsistencyLight()
4299 m1=MEDCouplingUMesh.New();
4300 m1.setMeshDimension(1);
4301 m1.allocateCells(3);
4302 m1.insertNextCell(NORM_SEG2,2,[1,4])
4303 m1.insertNextCell(NORM_SEG2,2,[3,6])
4304 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4305 m1.finishInsertingCells();
4307 m1.checkConsistencyLight()
4308 m2=MEDCouplingUMesh.New();
4309 m2.setMeshDimension(0);
4310 m2.allocateCells(4);
4311 m2.insertNextCell(NORM_POINT1,1,[1])
4312 m2.insertNextCell(NORM_POINT1,1,[3])
4313 m2.insertNextCell(NORM_POINT1,1,[2])
4314 m2.insertNextCell(NORM_POINT1,1,[6])
4315 m2.finishInsertingCells();
4317 m2.checkConsistencyLight()
4319 mm=MEDFileUMesh.New()
4320 self.assertTrue(mm.getUnivNameWrStatus())
4321 mm.setName("MyFirstMEDCouplingMEDmesh")
4322 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4326 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4328 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4329 # playing with groups
4330 g1_2=DataArrayInt.New()
4331 g1_2.setValues([1,3],2,1)
4333 g2_2=DataArrayInt.New()
4334 g2_2.setValues([1,2,3],3,1)
4336 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4337 g1_1=DataArrayInt.New()
4338 g1_1.setValues([0,1,2],3,1)
4340 g2_1=DataArrayInt.New()
4341 g2_1.setValues([0,2],2,1)
4343 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4344 g1_N=DataArrayInt.New()
4345 g1_N.setValues(list(range(8)),8,1)
4347 g2_N=DataArrayInt.New()
4348 g2_N.setValues(list(range(9)),9,1)
4350 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4351 mm.createGroupOnAll(0,"GrpOnAllCell")
4352 # check content of mm
4353 t=mm.getGroupArr(0,"G1",False)
4354 self.assertTrue(g1_2.isEqual(t));
4355 t=mm.getGroupArr(0,"G2",False)
4356 self.assertTrue(g2_2.isEqual(t));
4357 t=mm.getGroupArr(-1,"G1",False)
4358 self.assertTrue(g1_1.isEqual(t));
4359 t=mm.getGroupArr(-1,"G2",False)
4360 self.assertTrue(g2_1.isEqual(t));
4361 t=mm.getGroupArr(1,"G1",False)
4362 self.assertTrue(g1_N.isEqual(t));
4363 t=mm.getGroupArr(1,"G2",False)
4364 self.assertTrue(g2_N.isEqual(t));
4365 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4366 t=mm.getGroupArr(0,"GrpOnAllCell")
4368 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4369 mm2=pickle.loads(st)
4370 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4371 self.assertEqual(mm.getAxisType(),AX_CART)
4373 mm.setAxisType(AX_CYL)
4374 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4375 mm2=pickle.loads(st)
4376 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4377 self.assertEqual(mm2.getAxisType(),AX_CYL)
4381 def testMEDFileFieldsLoadSpecificEntities1(self):
4384 fileName="Pyfile87.med"
4388 m=MEDCouplingCMesh()
4389 arr=DataArrayDouble(nbNodes) ; arr.iota()
4391 m=m.buildUnstructured()
4394 fmts=MEDFileFieldMultiTS()
4395 for i in range(nbPdt):
4396 f=MEDCouplingFieldDouble(ON_NODES)
4398 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4400 f.setName(fieldName)
4401 f.setTime(float(i),i,0)
4402 fmts.appendFieldNoProfileSBT(f)
4405 mm=MEDFileUMesh() ; mm[0]=m
4406 fmts.write(fileName,2)
4407 mm.write(fileName,0)
4409 fs=MEDFileFields(fileName,False)
4410 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4411 fs.loadArraysIfNecessary()
4412 fs2.loadArraysIfNecessary()
4413 for i in range(nbPdt):
4414 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4416 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4417 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4418 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4419 fmts=MEDFileFieldMultiTS()
4420 for i in range(nbPdt):
4421 f=MEDCouplingFieldDouble(ON_CELLS)
4423 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4425 f.setName(fieldName)
4426 f.setTime(float(i),i,0)
4427 fmts.appendFieldNoProfileSBT(f)
4429 mm=MEDFileUMesh() ; mm[0]=m3
4431 self.assertEqual(mm.getNonEmptyLevels(),())
4433 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4434 fmts.write(fileName,2)
4435 fs=MEDFileFields(fileName,False)
4436 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4437 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4438 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4439 fs.loadArraysIfNecessary()
4440 fs2.loadArraysIfNecessary()
4441 fs3.loadArraysIfNecessary()
4442 fs4.loadArraysIfNecessary()
4443 for i in range(nbPdt):
4444 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4445 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4446 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4451 def testMEDFileLotsOfTSRW1(self):
4454 fileName="Pyfile88.med"
4455 nbPdt=300 # <- perftest = 30000
4458 maxPdt=100 # <- optimum = 500
4459 m=MEDCouplingCMesh()
4460 arr=DataArrayDouble(nbNodes) ; arr.iota()
4462 m=m.buildUnstructured()
4465 nbOfField=nbPdt//maxPdt
4467 for j in range(nbOfField):
4468 fmts=MEDFileFieldMultiTS()
4469 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4470 for i in range(s.start, s.stop, s.step):
4471 f=MEDCouplingFieldDouble(ON_NODES)
4473 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4475 f.setName("%s_%d"%(fieldName,j))
4476 f.setTime(float(i),i,0)
4477 fmts.appendFieldNoProfileSBT(f)
4482 mm=MEDFileUMesh() ; mm[0]=m
4483 fs.write(fileName,2)
4484 mm.write(fileName,0)
4486 def appendInDict(d,key,val):
4493 allFields=GetAllFieldNames(fileName)
4495 pat=re.compile("([\d]+)([\s\S]+)$")
4496 for st in allFields:
4500 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4503 appendInDict(allFieldsDict,st,'')
4507 for k in allFieldsDict:
4508 if allFieldsDict[k]!=['']:
4509 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4512 for it in allFieldsDict[k]:
4513 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4518 for ii in range(nbIter):
4519 zeResu.pushBackTimeSteps(fmts2.pop())
4522 fs2.pushField(zeResu)
4524 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4528 def testMEDFileMeshRearrangeFamIds1(self):
4529 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4530 fileName="Pyfile89.med"
4531 meshName='Maillage_2'
4533 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)])
4535 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])
4536 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])
4537 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4538 m0.setConnectivity(c0,c0i)
4541 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])
4542 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])
4543 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4544 m1.setConnectivity(c1,c1i)
4547 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])
4548 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4549 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4550 mm[-2]=m2.buildUnstructured()
4552 ref0=DataArrayInt(55) ; ref0[:]=0
4553 mm.setFamilyFieldArr(0,ref0)
4554 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]))
4555 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])
4556 mm.setFamilyFieldArr(-1,ref1)
4557 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])
4558 mm.setFamilyFieldArr(-2,ref2)
4560 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4561 mm.setFamilyId(f,fid)
4562 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4563 mm.setFamiliesOnGroup(grp,fams)
4564 mm.write(fileName,2)
4566 mm=MEDFileMesh.New(fileName)
4567 grp=mm.getGroup(-1,"Groupe_1")
4568 dai=grp.computeFetchedNodeIds()
4571 mm.rearrangeFamilies() # <- the aim of the test
4572 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4573 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4574 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4575 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4576 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])))
4577 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4578 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4579 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4580 for elt,fams in allGrps:
4581 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4582 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4583 for elt,eltId in allFams:
4584 self.assertEqual(mm.getFamilyId(elt),eltId)
4588 def testNonRegrCMeshSetFieldPfl1(self):
4589 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4590 ff=MEDFileField1TS()
4593 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4597 field=MEDCouplingFieldDouble(ON_CELLS)
4599 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4600 field.setName("Field")
4601 field.checkConsistencyLight()
4602 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4603 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4604 self.assertEqual(ff.getPfls(),())
4605 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4606 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4607 del ff,mm,field,field2,pfl
4608 # same with unstructured mesh
4609 ff=MEDFileField1TS()
4612 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4615 m=m.buildUnstructured()
4617 field=MEDCouplingFieldDouble(ON_CELLS)
4619 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4620 field.setName("Field")
4621 field.checkConsistencyLight()
4622 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4623 ff.setFieldProfile(field,mm,0,pfl)
4624 self.assertEqual(ff.getPfls(),())
4625 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4626 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4630 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4632 fileName="Pyfile90.med"
4633 fileName2="Pyfile91.med"
4634 arr=DataArrayDouble(5) ; arr.iota()
4635 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4636 m=m.buildUnstructured()
4637 d=DataArrayInt([3,7,11,15])
4640 m2=m[d.buildComplement(m.getNumberOfCells())]
4641 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4642 m.changeSpaceDimension(3,0.)
4643 arr=DataArrayDouble(3) ; arr.iota()
4644 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4645 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4646 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4647 m3D=m.buildExtrudedMesh(m1D,0)
4648 m3D.sortCellsInMEDFileFrmt()
4649 m3D.setName(meshName)
4650 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4651 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4652 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4655 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4656 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4657 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4658 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4659 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4660 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4661 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4662 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4663 mm.setGroupsAtLevel(0,[vol1,vol2])
4664 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4665 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4667 mmOut1=mm.linearToQuadratic(0,0.)
4668 mmOut1.write(fileName2,2)
4669 mmOut2=mmOut1.quadraticToLinear(0.)
4670 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4674 def testMEDFileMeshAddGroup1(self):
4675 m=MEDCouplingCMesh()
4676 arrX=DataArrayDouble(9) ; arrX.iota()
4677 arrY=DataArrayDouble(4) ; arrY.iota()
4678 m.setCoords(arrX,arrY)
4682 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4684 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4686 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4688 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4690 for grp in [grp0,grp1,grp2,grp3]:
4691 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4692 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4694 for grp in [grp0,grp1,grp2,grp3]:
4695 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4696 mm.addGroup(1,grpNode)
4697 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4698 for grp in [grp0,grp1,grp2,grp3]:
4699 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4700 for grp in [grp0,grp1,grp2,grp3]:
4701 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4702 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4703 mm.normalizeFamIdsMEDFile()
4704 for grp in [grp0,grp1,grp2,grp3]:
4705 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4706 for grp in [grp0,grp1,grp2,grp3]:
4707 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4708 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4712 def testMEDFileJoint1(self):
4713 fileName="Pyfile92.med"
4714 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4715 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4719 mm.setDescription("un maillage")
4720 mm.write(fileName,2)
4721 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4722 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4723 one_step_joint=MEDFileJointOneStep()
4724 one_step_joint.pushCorrespondence(cell_correspond)
4725 one_step_joint.pushCorrespondence(node_correspond)
4726 one_joint=MEDFileJoint()
4727 one_joint.pushStep(one_step_joint)
4728 one_joint.setLocalMeshName("maa1")
4729 one_joint.setRemoteMeshName("maa1")
4730 one_joint.setDescription("joint_description")
4731 one_joint.setJointName("joint_1")
4732 one_joint.setDomainNumber(1)
4733 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4734 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4735 self.assertEqual( one_joint.getDescription(), "joint_description")
4736 self.assertEqual( one_joint.getJointName(), "joint_1")
4737 self.assertEqual( one_joint.getDomainNumber(), 1)
4738 joints=MEDFileJoints()
4739 joints.pushJoint(one_joint);
4740 joints.write(fileName,0)
4742 jointsR=MEDFileJoints(fileName,mm.getName())
4743 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4744 jR = jointsR.getJointAtPos(0)
4745 self.assertTrue( jR.isEqual( one_joint ))
4746 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4747 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4748 jointsR.destroyJointAtPos(0)
4752 def testMEDFileJoint2(self):
4753 fileNameWr="Pyfile93.med"
4754 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4755 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4759 mm.setDescription("un maillage")
4760 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4761 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4762 one_step_joint=MEDFileJointOneStep()
4763 two_step_joint=MEDFileJointOneStep()
4764 one_joint=MEDFileJoint()
4765 two_joint=MEDFileJoint()
4766 one_step_joint.pushCorrespondence(node_correspond)
4767 one_joint.pushStep(one_step_joint)
4768 two_step_joint.pushCorrespondence(cell_correspond)
4769 two_step_joint.pushCorrespondence(node_correspond)
4770 two_joint.pushStep(two_step_joint)
4771 one_joint.setLocalMeshName("maa1")
4772 one_joint.setRemoteMeshName("maa1")
4773 one_joint.setDescription("joint_description_1")
4774 one_joint.setJointName("joint_1")
4775 one_joint.setDomainNumber(1)
4776 two_joint.setLocalMeshName("maa1")
4777 two_joint.setRemoteMeshName("maa1")
4778 two_joint.setDescription("joint_description_2")
4779 two_joint.setJointName("joint_2")
4780 two_joint.setDomainNumber(2)
4781 joints=MEDFileJoints()
4782 joints.pushJoint(one_joint)
4783 joints.pushJoint(two_joint)
4784 mm.setJoints( joints )
4785 mm.write(fileNameWr,2)
4787 mm=MEDFileMesh.New(fileNameWr)
4788 self.assertEqual( mm.getNumberOfJoints(), 2)
4789 jointsR = mm.getJoints();
4790 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4791 self.assertEqual( len( jointsR ), 2 )
4792 jointR1 = jointsR[0]
4793 jointR2 = jointsR[1]
4794 self.assertFalse( jointR1 is None )
4795 self.assertFalse( jointR2 is None )
4796 self.assertTrue( jointR1.isEqual( one_joint ))
4797 self.assertTrue( jointR2.isEqual( two_joint ))
4801 def testMEDFileJoint1(self):
4802 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4803 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4804 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4805 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4806 joint1st_1=MEDFileJointOneStep()
4807 joint1st_1.pushCorrespondence(cell_correspond)
4808 joint1st_1.pushCorrespondence(node_correspond)
4809 joint1st_2=MEDFileJointOneStep()
4810 joint1st_2.pushCorrespondence(cell_correspond)
4811 joint1st_2.pushCorrespondence(node_correspond)
4812 joint1st_3=MEDFileJointOneStep()
4813 joint1st_3.pushCorrespondence(node_correspond)
4814 joint1st_3.pushCorrespondence(cell_correspond)
4815 joint1st_4=MEDFileJointOneStep()
4816 joint1st_4.pushCorrespondence(cell_correspond)
4817 joint1st_5=MEDFileJointOneStep()
4818 joint1st_5.pushCorrespondence(cell_correspon2)
4819 joint1st_6=MEDFileJointOneStep()
4820 joint1st_6.pushCorrespondence(cell_correspon3)
4821 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4822 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4823 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4824 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4825 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4826 one_joint=MEDFileJoint()
4827 one_joint.pushStep(joint1st_1)
4828 one_joint.setLocalMeshName("maa1")
4829 one_joint.setRemoteMeshName("maa2")
4830 one_joint.setDescription("joint_description")
4831 one_joint.setJointName("joint_1")
4832 one_joint.setDomainNumber(1)
4833 self.assertEqual( "maa1", one_joint.getLocalMeshName())
4834 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4835 self.assertEqual( "joint_description", one_joint.getDescription())
4836 self.assertEqual( 1, one_joint.getDomainNumber())
4837 self.assertEqual( "joint_1", one_joint.getJointName())
4840 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4842 def testMEDFileSafeCall0(self):
4843 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4844 fname="Pyfile94.med"
4845 errfname="Pyfile94.err"
4848 # first clean file if needed
4849 if os.path.exists(fname):
4852 # second : build a file from scratch
4853 m=MEDCouplingCMesh()
4854 arr=DataArrayDouble(11) ; arr.iota()
4855 m.setCoords(arr,arr)
4860 # third : change permissions to remove write access on created file
4861 os.chmod(fname, 0o444)
4862 # four : try to append data on file -> check that it raises Exception
4863 f=MEDCouplingFieldDouble(ON_CELLS)
4866 f.setArray(DataArrayDouble(100))
4867 f.getArray()[:]=100.
4868 f.checkConsistencyLight()
4869 f1ts=MEDFileField1TS()
4870 f1ts.setFieldNoProfileSBT(f)
4872 tmp=StdOutRedirect(errfname)
4873 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4876 if os.path.exists(errfname):
4882 def testUnivStatus1(self):
4883 """ Non regression test to check the effectiveness of univ write status."""
4884 fname="Pyfile95.med"
4885 arr=DataArrayDouble(10) ; arr.iota()
4886 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4887 mm=MEDFileCMesh() ; mm.setMesh(m)
4888 mm.setUnivNameWrStatus(False) # test is here
4890 mm=MEDFileCMesh(fname)
4891 self.assertEqual(mm.getUnivName(),"")
4892 mm.setUnivNameWrStatus(True)
4894 mm=MEDFileCMesh(fname)
4895 self.assertTrue(mm.getUnivName()!="")
4899 def testEmptyMesh(self):
4900 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4902 fname = "Pyfile96.med"
4903 m = MEDCouplingUMesh('toto', 2)
4904 m.setCoords(DataArrayDouble([], 0, 2))
4905 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4906 mfu = MEDFileUMesh()
4907 mfu.setMeshAtLevel(0, m)
4909 mfu2 = MEDFileUMesh(fname)
4910 self.assertEqual('toto', mfu2.getName())
4911 lvl = mfu2.getNonEmptyLevels()
4912 self.assertEqual((), lvl)
4914 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4915 def testMEDFileUMeshPickeling2(self):
4916 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4922 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4923 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4924 mesh=MEDFileUMesh() ; mesh[0]=m
4925 m1=m.computeSkin() ; mesh[-1]=m1
4927 bary1=m1.computeCellCenterOfMass()[:,2]
4928 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4929 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4930 mesh.setGroupsAtLevel(-1,[grp1,grp2])
4932 st=pickle.dumps(mesh,2)
4934 st2=pickle.dumps(mm,2)
4935 mm2=pickle.loads(st2)
4936 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4940 def testMEDFileEquivalence1(self):
4941 """ First check of equivalence implementation in MEDFileMesh"""
4942 fileName="Pyfile97.med"
4945 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)])
4946 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4947 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])
4948 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4949 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])
4950 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4951 mm.getFamilyFieldAtLevel(-1)[:]=-2
4952 mm.getFamilyFieldAtLevel(0)[:]=0
4953 mm.addFamily("HOMARD________-1",-1)
4954 mm.addFamily("HOMARD________-2",-2)
4955 mm.addFamily("HOMARD________-3",-3)
4956 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4958 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4959 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."
4960 mm.initializeEquivalences()
4961 eqs=mm.getEquivalences()
4962 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4963 eq0.setDescription(descEq)
4964 corr=DataArrayInt32([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
4965 eq0.setArray(-1,corr)
4966 self.assertEqual(eq0.getCell().size(),1)
4967 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4968 eq0.getCell().clear()
4969 self.assertEqual(eq0.getCell().size(),0)
4970 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4971 self.assertEqual(eq0.getCell().size(),1)
4972 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4973 mm.killEquivalences()
4974 mm.initializeEquivalences()
4975 eqs=mm.getEquivalences()
4976 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4977 eq0.setDescription(descEq)
4979 c.setArrayForType(NORM_QUAD4,corr)
4980 self.assertEqual(eq0.getCell().size(),1)
4981 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4983 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4984 self.assertEqual(mm2.getEquivalences().size(),1)
4985 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4986 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4987 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4988 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4989 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4990 mm.write(fileName,2)
4992 mm3=MEDFileMesh.New(fileName)
4993 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4997 def testMEDFileForFamiliesPlayer1(self):
4998 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4999 fileName="Pyfile98.med"
5001 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5002 arr=DataArrayDouble(4) ; arr.iota()
5003 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5004 m=m.buildUnstructured()
5007 mm.setName(meshName)
5008 mm.setFamilyId("FAMILLE_ZERO",0)
5009 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5010 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5011 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5012 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5013 mm.setFamilyFieldArr(1,d)
5014 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5015 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5016 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5017 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5018 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5019 mm.write(fileName,2)
5020 # now read such funny file !
5021 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5022 self.assertTrue(mm.isEqual(mm2,1e-16))
5023 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5024 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5025 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5029 def testCartesianizer1(self):
5030 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5032 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5033 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5034 d0=DataArrayInt(16) ; d0[:]=0
5035 d1=DataArrayInt(9) ; d1[:]=0
5036 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5037 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5038 ref0=mm.getCoords().getHiddenCppPointer()
5039 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5040 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5041 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5042 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5043 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5044 mm.setAxisType(AX_CYL) #<- important
5045 mm2=mm.cartesianize() # the trigger
5046 self.assertEqual(mm2.getAxisType(),AX_CART)
5047 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5048 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5049 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5050 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5051 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5052 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5053 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5054 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5055 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5056 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5057 self.assertEqual(mm2.getName(),mm.getName())
5058 self.assertEqual(mm2.getDescription(),mm.getDescription())
5059 self.assertEqual(mm2.getTime(),mm.getTime())
5060 self.assertEqual(mm2.getTime(),mm.getTime())
5061 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5062 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5063 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5064 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5065 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5066 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5067 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5068 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5070 mm.setAxisType(AX_CART)
5071 mm2=mm.cartesianize() # the trigger
5072 self.assertEqual(mm2.getAxisType(),AX_CART)
5073 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5074 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5075 # CurveLinearMesh non cart
5076 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5077 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5078 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5079 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5080 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5081 mm2=mm.cartesianize() # the trigger
5082 self.assertEqual(mm2.getAxisType(),AX_CART)
5083 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5084 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5085 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5086 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5087 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5088 self.assertEqual(mm2.getName(),mm.getName())
5089 self.assertEqual(mm2.getDescription(),mm.getDescription())
5090 self.assertEqual(mm2.getTime(),mm.getTime())
5091 self.assertEqual(mm2.getTime(),mm.getTime())
5092 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5093 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5094 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5095 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5096 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5097 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5098 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5099 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5100 # CurveLinearMesh cart
5101 mm.setAxisType(AX_CART)
5102 mm2=mm.cartesianize() # the trigger
5103 self.assertEqual(mm2.getAxisType(),AX_CART)
5104 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5105 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5107 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5108 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5109 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5110 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5111 mm2=mm.cartesianize() # the trigger
5112 self.assertEqual(mm2.getAxisType(),AX_CART)
5113 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5114 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5115 self.assertEqual(mm2.getName(),mm.getName())
5116 self.assertEqual(mm2.getDescription(),mm.getDescription())
5117 self.assertEqual(mm2.getTime(),mm.getTime())
5118 self.assertEqual(mm2.getTime(),mm.getTime())
5119 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5120 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5121 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5122 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5123 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5124 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5125 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5126 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5128 mm.setAxisType(AX_CART)
5129 mm2=mm.cartesianize() # the trigger
5130 self.assertEqual(mm2.getAxisType(),AX_CART)
5131 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5132 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5136 def testCheckCoherency(self):
5137 m2 = MEDCouplingUMesh("2d", 2)
5138 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5139 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5140 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5141 mum = MEDFileUMesh()
5142 mum.setMeshAtLevel(0, m2)
5143 mum.setMeshAtLevel(-1, m1)
5144 mum.checkConsistency()
5145 mum2 = mum.deepCopy()
5148 arr = DataArrayInt([2]*4)
5149 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5150 self.assertRaises(InterpKernelException, mum.checkConsistency)
5151 mum=mum2; mum2=mum.deepCopy();
5152 arr = DataArrayInt([2]*4)
5153 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5154 self.assertRaises(InterpKernelException, mum.checkConsistency)
5155 mum=mum2; mum2=mum.deepCopy();
5156 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5157 self.assertRaises(InterpKernelException, mum.checkConsistency)
5158 mum=mum2; mum2=mum.deepCopy();
5159 arr = DataArrayAsciiChar(['tutu x']*4)
5160 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5161 self.assertRaises(InterpKernelException, mum.checkConsistency)
5164 mum=mum2; mum2=mum.deepCopy();
5165 arr = DataArrayInt([2]*2)
5166 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5167 self.assertRaises(InterpKernelException, mum.checkConsistency)
5168 mum=mum2; mum2=mum.deepCopy();
5169 arr = DataArrayInt([2]*2)
5170 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5171 self.assertRaises(InterpKernelException, mum.checkConsistency)
5172 mum=mum2; mum2=mum.deepCopy();
5173 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5174 self.assertRaises(InterpKernelException, mum.checkConsistency)
5175 mum=mum2; mum2=mum.deepCopy();
5176 arr = DataArrayAsciiChar(['tutu x']*2)
5177 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5178 self.assertRaises(InterpKernelException, mum.checkConsistency)
5181 mum=mum2; mum2=mum.deepCopy();
5182 arr = DataArrayInt([2]*5)
5183 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5184 self.assertRaises(InterpKernelException, mum.checkConsistency)
5185 mum=mum2; mum2=mum.deepCopy();
5186 arr = DataArrayInt([2]*5)
5187 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5188 self.assertRaises(InterpKernelException, mum.checkConsistency)
5189 mum=mum2; mum2=mum.deepCopy();
5190 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5191 self.assertRaises(InterpKernelException, mum.checkConsistency)
5192 mum=mum2; mum2=mum.deepCopy();
5193 arr = DataArrayAsciiChar(['tutu x']*5)
5194 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5195 self.assertRaises(InterpKernelException, mum.checkConsistency)
5198 def testCheckSMESHConsistency(self):
5199 m2 = MEDCouplingUMesh("2d", 2)
5200 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5201 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5202 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5203 mum = MEDFileUMesh()
5204 mum.setMeshAtLevel(0, m2)
5205 mum.setMeshAtLevel(-1, m1)
5206 mum.checkConsistency()
5207 mum.checkSMESHConsistency()
5208 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5209 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5210 mum.setRenumFieldArr(0, n2)
5211 mum.setRenumFieldArr(-1, n1)
5212 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5213 mum.setRenumFieldArr(-1, n1+100)
5214 mum.checkSMESHConsistency()
5218 def testClearNodeAndCellNumbers(self):
5219 m2 = MEDCouplingUMesh("2d", 2)
5220 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5221 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5222 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5223 mum = MEDFileUMesh()
5224 mum.setMeshAtLevel(0, m2)
5225 mum.setMeshAtLevel(-1, m1)
5226 mum.checkConsistency()
5227 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5228 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5229 mum.setRenumFieldArr(0, n2)
5230 mum.setRenumFieldArr(-1, n1)
5231 mum.clearNodeAndCellNumbers()
5232 mum.checkSMESHConsistency()
5236 def testCMeshSetFamilyFieldArrNull(self):
5238 fname="Pyfile99.med"
5239 arrX=DataArrayDouble([0,1,2,3])
5240 arrY=DataArrayDouble([0,1,2])
5241 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5242 mm=MEDFileCMesh() ; mm.setMesh(m)
5243 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5244 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5245 mm.setFamilyFieldArr(0,famCellIds)
5246 mm.setFamilyFieldArr(1,famNodeIds)
5248 mm=MEDFileMesh.New(fname)
5249 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5250 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5251 mm.setFamilyFieldArr(0,None)#<- bug was here
5252 mm.setFamilyFieldArr(1,None)#<- bug was here
5253 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5254 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5256 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5257 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5259 mm2=MEDFileMesh.New(fname)
5260 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5261 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5265 def testAppendFieldProfileOnIntField(self):
5266 fname="Pyfile100.med"
5267 arrX=DataArrayDouble([0,1,2,3])
5268 arrY=DataArrayDouble([0,1,2])
5269 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5273 fmts=MEDFileIntFieldMultiTS()
5275 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5276 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5277 fieldName="FieldOnCell"
5278 f.setTime(1.2,1,1) ; f.setName(fieldName)
5279 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5280 fmts.appendFieldProfile(f,mm,0,pfl)
5285 mm=MEDFileMesh.New(fname)
5286 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5287 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5288 self.assertEqual(fmts.getName(),fieldName)
5289 self.assertEqual(len(fmts),1)
5291 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5292 self.assertEqual(pfltest.getName(),pflName)
5293 self.assertEqual(ftest.getName(),fieldName)
5294 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5295 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5296 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5297 self.assertEqual(ftest2.getTime(),f.getTime())
5298 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5302 def testMEDFileFieldEasyField1(self):
5303 """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."""
5304 ## Basic test on cells on top level
5305 fname="Pyfile101.med"
5308 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5309 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5311 m.insertNextCell(NORM_TRI3,[0,1,2])
5312 m.insertNextCell(NORM_TRI3,[3,4,5])
5313 m.insertNextCell(NORM_TRI3,[6,7,8])
5314 m.insertNextCell(NORM_TRI3,[9,10,11])
5315 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5316 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5319 arr0=DataArrayDouble([10,11,12,13,100,101])
5320 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5321 f.setName(fieldName) ; f.setTime(2.,6,7)
5323 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5325 arr2=arr0+1000 ; f.setArray(arr2)
5326 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5330 mm=MEDFileMesh.New(fname)
5331 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5332 ftst0=f1ts.field(mm)
5333 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5334 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5335 ftst1=f1ts.field(mm)
5336 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5337 fmts=MEDFileFieldMultiTS(fname,fieldName)
5338 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5339 ## Basic test on nodes on top level
5340 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5341 f2.setName(fieldName)
5343 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5345 mm=MEDFileMesh.New(fname)
5346 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5347 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5348 fmts=MEDFileFieldMultiTS(fname,fieldName)
5349 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5351 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)
5352 f3.setName(fieldName) ; f3.checkConsistencyLight()
5353 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5355 mm=MEDFileMesh.New(fname)
5356 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5357 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5359 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5360 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])
5361 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)
5362 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)
5363 f4.checkConsistencyLight()
5364 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5366 mm=MEDFileMesh.New(fname)
5367 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5368 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5372 def testMEDFileFieldEasyField2(self):
5373 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5374 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."""
5375 ## Basic test on cells on top level
5376 fname="Pyfile102.med"
5379 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5380 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5382 m.insertNextCell(NORM_TRI3,[0,1,2])
5383 m.insertNextCell(NORM_TRI3,[3,4,5])
5384 m.insertNextCell(NORM_TRI3,[6,7,8])
5385 m.insertNextCell(NORM_TRI3,[9,10,11])
5386 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5387 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5390 arr0=DataArrayInt32([10,11,12,13,100,101])
5391 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5392 f.setName(fieldName) ; f.setTime(2.,6,7)
5394 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5396 arr2=arr0+1000 ; f.setArray(arr2)
5397 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5401 mm=MEDFileMesh.New(fname)
5402 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5403 ftst0=f1ts.field(mm)
5404 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5405 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5406 ftst1=f1ts.field(mm)
5407 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5408 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5409 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5410 ## Basic test on nodes on top level
5411 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5412 f2.setName(fieldName)
5414 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5416 mm=MEDFileMesh.New(fname)
5417 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5418 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5419 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5420 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5422 f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt32([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5423 f3.setName(fieldName) ; f3.checkConsistencyLight()
5424 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5426 mm=MEDFileMesh.New(fname)
5427 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5428 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5430 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5431 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])
5432 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)
5433 arr4=DataArrayInt32([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5434 f4.checkConsistencyLight()
5435 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5437 mm=MEDFileMesh.New(fname)
5438 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5439 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5443 def testMEDFileFieldEasyField3(self):
5444 """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."""
5445 fname="Pyfile103.med"
5448 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5449 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5451 m.insertNextCell(NORM_TRI3,[0,1,2])
5452 m.insertNextCell(NORM_TRI3,[3,4,5])
5453 m.insertNextCell(NORM_TRI3,[6,7,8])
5454 m.insertNextCell(NORM_TRI3,[9,10,11])
5455 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5456 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5458 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5460 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5461 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5465 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5466 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5468 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5469 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5470 # here f1 lying on level -1 not 0 check if "field" method detect it !
5471 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5472 f1.setMesh(mm[-1]) # -1 is very important
5474 f1.checkConsistencyLight()
5476 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5478 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5479 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5481 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5482 f3.setMesh(mm[-1]) # this line is important
5483 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)
5484 f3.setName(fieldName) ; f3.checkConsistencyLight()
5485 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5487 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5488 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5490 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5491 f4.setMesh(mm[-1]) # this line is important
5492 f4.setName(fieldName)
5493 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])
5494 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)
5495 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)
5496 f4.checkConsistencyLight()
5497 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5498 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5499 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5503 def testMEDFileFieldEasyField4(self):
5504 """ Same than testMEDFileFieldEasyField3 but with integers"""
5505 fname="Pyfile104.med"
5508 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5509 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5511 m.insertNextCell(NORM_TRI3,[0,1,2])
5512 m.insertNextCell(NORM_TRI3,[3,4,5])
5513 m.insertNextCell(NORM_TRI3,[6,7,8])
5514 m.insertNextCell(NORM_TRI3,[9,10,11])
5515 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5516 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5518 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5520 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5521 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5525 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5526 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5528 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5529 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5530 # here f1 lying on level -1 not 0 check if "field" method detect it !
5531 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5532 f1.setMesh(mm[-1]) # -1 is very important
5534 f1.checkConsistencyLight()
5536 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5538 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5539 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5541 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5542 f3.setMesh(mm[-1]) # this line is important
5543 arr3=DataArrayInt32([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5544 f3.setName(fieldName) ; f3.checkConsistencyLight()
5545 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5547 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5548 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5550 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5551 f4.setMesh(mm[-1]) # this line is important
5552 f4.setName(fieldName)
5553 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])
5554 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)
5555 arr4=DataArrayInt32([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5556 f4.checkConsistencyLight()
5557 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5558 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5559 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5563 def testMEDFileFieldEasyField5(self):
5564 """More and more difficult now look at how profiles are managed by "field" method."""
5565 fname="Pyfile105.med"
5568 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5569 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5571 m.insertNextCell(NORM_TRI3,[0,1,2])
5572 m.insertNextCell(NORM_TRI3,[3,4,5])
5573 m.insertNextCell(NORM_TRI3,[6,7,8])
5574 m.insertNextCell(NORM_TRI3,[9,10,11])
5575 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5576 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5579 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5580 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5582 arr0=DataArrayDouble([10,11,12,13])
5583 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5584 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5585 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5588 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5589 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5590 # more complicated -> multi level
5591 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5593 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5594 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5596 mm2[0]=m0 ; mm2[-1]=m
5598 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5600 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5601 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5605 def testExtractPart1(self):
5606 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)])
5608 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5609 m0.insertNextCell(NORM_TRI3,[8,4,3])
5610 m0.insertNextCell(NORM_TRI3,[8,9,4])
5611 m0.insertNextCell(NORM_TRI3,[7,13,8])
5612 m0.insertNextCell(NORM_TRI3,[7,12,13])
5613 m0.insertNextCell(NORM_TRI3,[0,6,1])
5614 m0.insertNextCell(NORM_TRI3,[0,5,6])
5615 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5616 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5617 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5618 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5619 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5621 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5622 m1.insertNextCell(NORM_SEG2,[10,5])
5623 m1.insertNextCell(NORM_SEG2,[5,0])
5624 m1.insertNextCell(NORM_SEG2,[0,1])
5625 m1.insertNextCell(NORM_SEG2,[1,2])
5626 m1.insertNextCell(NORM_SEG2,[2,3])
5627 m1.insertNextCell(NORM_SEG2,[3,4])
5628 m1.insertNextCell(NORM_SEG2,[4,9])
5629 m1.insertNextCell(NORM_SEG2,[9,14])
5630 m1.insertNextCell(NORM_SEG2,[14,13])
5631 m1.insertNextCell(NORM_SEG2,[13,12])
5632 m1.insertNextCell(NORM_SEG2,[12,11])
5633 m1.insertNextCell(NORM_SEG2,[11,10])
5635 mm[0]=m0 ; mm[-1]=m1
5636 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5638 tab[0]=DataArrayInt([0,2,3,4,6,7])
5639 tab[-1]=DataArrayInt([2,3,4,5,9])
5641 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5645 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5648 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5649 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5650 f0.setMesh(m0) ; f0.setName(fname0)
5651 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5652 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5653 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]))
5654 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5655 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5656 fmts.pushBackTimeStep(f1ts)
5658 mmOut=mm.extractPart(tab)
5660 fsPart0=fs.extractPart(tab,mm)
5661 self.assertEqual(len(fsPart0),1)
5663 self.assertEqual(len(fmtsP),1)
5665 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5667 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5668 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5670 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5671 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5672 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5673 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5674 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5676 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5677 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5678 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5679 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5680 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5681 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5682 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5683 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5684 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5685 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5687 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5688 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5689 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5691 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5692 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5693 for i,tt in enumerate(tss):
5694 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5695 myarr=arr0_0+i*1000.
5697 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5698 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5700 fsPart1=fs.extractPart(tab,mm)
5701 self.assertEqual(len(fsPart1),1)
5703 self.assertEqual(len(fmtsP),len(tss))
5704 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5705 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5706 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5707 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5708 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5709 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5710 self.assertEqual(fPart.getTime(),list(tt))
5715 def testSymmetryPlusAggregationMFD1(self):
5716 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5717 fname1="Pyfile106_1.med"
5718 fname2="Pyfile106_2.med"
5719 fname3="Pyfile106_3.med"
5722 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5724 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5725 mm1_0.setCoords(da1)
5726 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5727 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5728 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5729 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5730 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5732 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5733 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5735 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5736 mm1_1.setCoords(da1)
5737 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5738 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5739 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5740 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5741 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5742 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5744 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5745 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5746 for i in range(1,10):
5747 mm1.setFamilyId("F%d"%i,i)
5748 mm1.setFamilyId("FAMILLE_ZERO",0)
5749 mm1.setFamilyId("H1",100)
5750 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5751 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5752 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5753 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5756 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]"])
5758 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5759 mm2_0.setCoords(da1)
5760 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5761 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5762 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5763 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5765 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5766 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5768 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5769 mm2_1.setCoords(da1)
5770 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5771 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5772 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5773 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5774 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5775 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5776 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5777 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5779 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5780 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5781 for i in range(1,12):
5782 mm2.setFamilyId("G%d"%i,i+30)
5783 mm2.setFamilyId("H1",100)
5784 mm2.setFamilyId("FAMILLE_ZERO",0)
5785 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5786 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5787 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5788 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5790 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5792 def CheckMesh(tester,mm):
5793 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]"])
5794 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5795 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])))
5796 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5797 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])))
5798 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5799 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5800 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5801 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5802 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5803 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)]
5804 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5805 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5806 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5807 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5814 infoc=["dd [W]","eee [kA]"]
5816 fmts1=MEDFileFieldMultiTS()
5817 f1ts1=MEDFileField1TS()
5818 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5819 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5820 arr1.setInfoOnComponents(infoc)
5821 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5822 f1_1.checkConsistencyLight()
5823 f1ts1.setFieldNoProfileSBT(f1_1)
5825 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5826 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5827 arr2.setInfoOnComponents(infoc)
5828 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5829 f1_2.checkConsistencyLight()
5830 f1ts1.setFieldNoProfileSBT(f1_2)
5831 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5832 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5833 arr3.setInfoOnComponents(infoc)
5834 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5835 f1_3.checkConsistencyLight()
5836 f1ts1.setFieldNoProfileSBT(f1_3)
5837 fmts1.pushBackTimeStep(f1ts1)
5839 f1ts2=f1ts1.deepCopy()
5840 f1ts2.setTime(t2[1],t2[2],t2[0])
5841 f1ts2.getUndergroundDataArray()[:]+=2000
5842 fmts1.pushBackTimeStep(f1ts2)
5844 fmts2=MEDFileFieldMultiTS()
5845 f1ts3=MEDFileField1TS()
5846 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5847 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5848 arr4.setInfoOnComponents(infoc)
5849 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5850 f2_1.checkConsistencyLight()
5851 f1ts3.setFieldNoProfileSBT(f2_1)
5852 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5853 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5854 arr5.setInfoOnComponents(infoc)
5855 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5856 f2_2.checkConsistencyLight()
5857 f1ts3.setFieldNoProfileSBT(f2_2)
5858 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5859 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5860 arr6.setInfoOnComponents(infoc)
5861 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5862 f2_3.checkConsistencyLight()
5863 f1ts3.setFieldNoProfileSBT(f2_3)
5864 fmts2.pushBackTimeStep(f1ts3)
5866 f1ts4=f1ts3.deepCopy()
5867 f1ts4.setTime(t2[1],t2[2],t2[0])
5868 f1ts4.getUndergroundDataArray()[:]+=2000
5869 fmts2.pushBackTimeStep(f1ts4)
5872 mfd1.setMeshes(MEDFileMeshes())
5873 mfd1.getMeshes().pushMesh(mm1)
5874 mfd1.setFields(MEDFileFields())
5875 mfd1.getFields().pushField(fmts1)
5878 mfd2.setMeshes(MEDFileMeshes())
5879 mfd2.getMeshes().pushMesh(mm2)
5880 mfd2.setFields(MEDFileFields())
5881 mfd2.getFields().pushField(fmts2)
5883 mfd=MEDFileData.Aggregate([mfd1,mfd2])
5884 def CheckMFD(tester,mfd):
5885 tester.assertEqual(len(mfd.getMeshes()),1)
5886 tester.assertEqual(len(mfd.getFields()),1)
5887 CheckMesh(self,mfd.getMeshes()[0])
5888 tester.assertEqual(len(mfd.getFields()[0]),2)
5889 zeF1=mfd.getFields()[0][0]
5890 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5891 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5892 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5893 ref.renumberCells(o2n)
5894 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5895 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5896 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5897 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5898 ref.renumberCells(o2n)
5899 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5900 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5901 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5902 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5903 ref.renumberCells(o2n)
5904 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5906 zeF2=mfd.getFields()[0][1]
5907 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5908 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5909 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5910 ref.renumberCells(o2n)
5911 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5912 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5913 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5914 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5915 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5916 ref.renumberCells(o2n)
5917 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5918 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5919 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5920 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5921 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5922 ref.renumberCells(o2n)
5923 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5924 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5926 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5927 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5932 def testAggregateWithGroups(self):
5933 """ Testing MEDFileUMesh::Aggretate when groups are present. """
5934 def generate(grp_name, offset):
5935 coo = DataArrayDouble([0., 1., 2.])
5937 m = MEDCouplingCMesh("toto")
5938 m.setCoords(coo, coo)
5939 m = m.buildUnstructured()
5940 mu = MEDFileUMesh.New()
5941 mu.setMeshAtLevel(0, m)
5942 g = DataArrayInt([0])
5944 g2 = DataArrayInt([1])
5945 g2.setName("common") # make a common group for all meshes being merged
5946 mu.setGroupsAtLevel(0, [g, g2])
5949 m1 = generate("A", 0.)
5950 m2 = generate("B", 2.)
5951 mm = MEDFileUMesh.Aggregate([m1,m2])
5953 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
5954 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
5955 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
5956 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5957 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5958 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
5959 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
5960 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
5961 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
5966 def testExtrudedMesh1(self):
5967 fname="Pyfile107.med"
5968 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
5969 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
5970 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
5973 ex2=mm.convertToExtrudedMesh()
5974 mm2=MEDFileMesh.New(fname)
5975 ex3=mm2.convertToExtrudedMesh()
5976 self.assertTrue(ex.isEqual(ex2,1e-12))
5977 self.assertTrue(ex.isEqual(ex3,1e-12))
5980 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
5982 def testWriteInto30(self):
5983 fname="Pyfile108.med"
5984 fname2="Pyfile109.med"
5985 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
5986 mm=MEDFileUMesh() ; mm[0]=m
5987 mm.setFamilyId("FAMILLE_ZERO",0)
5990 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
5991 mm2=MEDFileUMesh(fname)
5992 self.assertTrue(mm.isEqual(mm2,1e-12))
5995 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
5998 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6000 def testPickelizationOfMEDFileObjects1(self):
6001 fname="Pyfile110.med"
6002 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)
6003 m0=MEDCouplingUMesh("Mesh",2)
6005 m0.insertNextCell(NORM_TRI3,[1,4,2])
6006 m0.insertNextCell(NORM_TRI3,[4,5,2])
6007 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6008 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6009 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6010 m0.finishInsertingCells()
6012 m1=MEDCouplingUMesh(m0.getName(),1)
6014 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6016 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6018 m1.finishInsertingCells()
6022 m.setMeshAtLevel(0,m0)
6023 m.setMeshAtLevel(-1,m1)
6025 dt=3 ; it=2 ; tim=4.5
6026 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6027 fieldNode0.setName("fieldNode0")
6028 fieldNode0.setTime(tim,dt,it)
6029 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6030 arr=DataArrayDouble([10,11,12,13,14])
6031 fieldNode0.setArray(arr)
6032 f0=MEDFileField1TS()
6033 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6034 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6035 fieldNode1.setName("fieldNode1")
6036 fieldNode1.setTime(tim,dt,it)
6037 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6038 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6039 fieldNode1.setArray(arr1)
6040 f1=MEDFileField1TS()
6041 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6043 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6044 mfd.getMeshes().pushMesh(m)
6045 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6046 mfd.getFields().pushField(fmts)
6047 # first start gently
6050 self.assertEqual(len(mfd2.getMeshes()),1)
6051 self.assertEqual(len(mfd2.getFields()),1)
6052 self.assertEqual(len(mfd2.getFields()[0]),1)
6053 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6054 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6055 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6056 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6057 # OK now end of joke -> serialization of MEDFileData
6058 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6059 mfd3=pickle.loads(st)
6061 self.assertEqual(len(mfd3.getMeshes()),1)
6062 self.assertEqual(len(mfd3.getFields()),1)
6063 self.assertEqual(len(mfd3.getFields()[0]),1)
6064 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6065 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6066 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6067 # serialization of MEDFileFields
6068 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6069 fs4=pickle.loads(st)
6070 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6071 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6072 # serialization of MEDFileFieldMulitTS
6073 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6074 fmts5=pickle.loads(st)
6075 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6076 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6077 # serialization of MEDFileField1TS
6078 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6079 f1ts6=pickle.loads(st)
6080 ff6=f1ts6.field(mfd3.getMeshes()[0])
6081 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6082 # serialization of MEDFileMeshes
6083 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6084 ms7=pickle.loads(st)
6085 self.assertEqual(len(ms7),1)
6086 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6089 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6091 def testPickelizationOfMEDFileObjects2(self):
6093 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6094 mm=MEDFileMesh.New("MEDFileMesh5.med")
6095 self.assertTrue(isinstance(mm,MEDFileCMesh))
6096 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6097 mm2=pickle.loads(st)
6098 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6099 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6101 self.internalCurveLinearMesh1() # generates Pyfile55.med
6102 mm=MEDFileMesh.New("Pyfile55.med")
6103 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6104 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6105 mm3=pickle.loads(st)
6106 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6107 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6108 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6109 # MEDFileIntFieldMultiTS
6110 fs4=MEDFileFields("Pyfile63.med")
6111 ms4=MEDFileMeshes("Pyfile63.med")
6112 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6113 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6114 fmts5=pickle.loads(st)
6115 self.assertEqual(len(fs4[0]),len(fmts5))
6116 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6117 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6118 # MEDFileIntField1TS
6119 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6120 f1ts6=pickle.loads(st)
6121 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6122 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6124 self.internalParameters1()# generates Pyfile56.med
6125 params=MEDFileParameters("Pyfile56.med")
6126 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6127 params7=pickle.loads(st)
6128 self.assertEqual(len(params),len(params7))
6129 for i in range(len(params)):
6130 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6135 def testGlobalNumOnNodes1(self):
6136 """Test global number on nodes here. Used by partitionners."""
6137 fname="Pyfile112.med"
6138 arr=DataArrayDouble(5) ; arr.iota()
6139 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6143 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6144 d=DataArrayInt([7,8,9,2,0])
6146 mm.setGlobalNumFieldAtLevel(1,d)
6147 mm.checkConsistency()
6148 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6149 mm.checkConsistency()
6150 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6151 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6153 mm2=MEDFileMesh.New(fname)
6154 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6155 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6156 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6157 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6158 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6159 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6163 def testPartialReadOfEntities1(self):
6164 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6165 fname="Pyfile113.med"
6166 arr=DataArrayDouble(5) ; arr.iota()
6167 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6174 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6175 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6177 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6178 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6180 f1ts=MEDFileField1TS()
6181 f1ts.setFieldNoProfileSBT(f1)
6182 f1ts.setFieldNoProfileSBT(f2)
6183 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6184 f1ts_2=f1ts.deepCopy()
6185 f1ts_2.getUndergroundDataArray()[:]+=2
6186 f1ts_2.setTime(3,4,6.)
6187 fmts=MEDFileFieldMultiTS()
6188 fmts.pushBackTimeStep(f1ts)
6189 fmts.pushBackTimeStep(f1ts_2)
6194 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6195 mm=MEDFileMesh.New(fname)
6196 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)
6198 self.assertEqual(len(fs),1)
6200 self.assertEqual(len(fmts),2)
6201 ff0=fmts[0] ; ff1=fmts[1]
6202 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6203 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6204 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6205 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6209 def testFloat32InMEDFileFieldStar1(self):
6210 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6211 fname="Pyfile114.med"
6212 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6213 f1=f1.convertToFloatField()
6215 mm1=MEDFileUMesh.New()
6216 mm1.setCoords(m1.getCoords())
6217 mm1.setMeshAtLevel(0,m1)
6218 mm1.setName(m1.getName())
6220 ff1=MEDFileFloatField1TS()
6221 ff1.setFieldNoProfileSBT(f1)
6222 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6223 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6224 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6226 a,b=ff1.getUndergroundDataArrayExt()
6227 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6228 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6229 ff2=MEDFileAnyTypeField1TS.New(fname)
6230 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6231 self.assertEqual(ff2.getTime(),[0,1,2.0])
6232 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6233 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6234 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6235 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6237 c=ff2.getUndergroundDataArray() ; c*=2
6238 ff2.write(fname,0) # 2 time steps in
6239 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6240 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6241 self.assertEqual(len(ffs1),2)
6242 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6243 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6244 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6245 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6246 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6247 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6248 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6249 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6250 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6251 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6252 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6254 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6257 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6258 nf1=MEDCouplingFieldFloat(ON_NODES)
6259 nf1.setTime(9.,10,-1)
6260 nf1.setMesh(f1.getMesh())
6261 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6262 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6263 nff1=MEDFileFloatField1TS.New()
6264 nff1.setFieldNoProfileSBT(nf1)
6265 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6266 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6269 nf2=MEDCouplingFieldFloat(ON_NODES)
6270 nf2.setTime(19.,20,-11)
6271 nf2.setMesh(f1.getMesh())
6272 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6273 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6274 nff2=MEDFileFloatField1TS.New()
6275 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6276 nff2.setFieldProfile(nf2,mm1,0,npfl)
6277 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6278 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6279 self.assertTrue(b.isEqual(npfl))
6280 self.assertTrue(a.isEqual(narr2,1e-7))
6282 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6283 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6284 self.assertTrue(b.isEqual(npfl))
6285 self.assertTrue(a.isEqual(narr2,1e-7))
6287 nf3=MEDCouplingFieldDouble(ON_NODES)
6288 nf3.setName("VectorFieldOnNodesDouble")
6289 nf3.setTime(29.,30,-21)
6290 nf3.setMesh(f1.getMesh())
6291 nf3.setArray(f1.getMesh().getCoords())
6292 nff3=MEDFileField1TS.New()
6293 nff3.setFieldNoProfileSBT(nf3)
6295 fs=MEDFileFields(fname)
6296 self.assertEqual(len(fs),4)
6297 ffs=[it for it in fs]
6298 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6299 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6300 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6301 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6303 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6304 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6305 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6306 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6307 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6309 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6310 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6311 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6312 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6313 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6314 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6315 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6316 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6318 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6319 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6320 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6321 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6325 def testPenta18_1(self):
6326 """EDF8478 : Test of read/write of penta18"""
6327 fname="Pyfile115.med"
6328 arr=DataArrayDouble([
6329 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6330 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6331 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6332 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6333 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6334 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6335 m=MEDCouplingUMesh("mesh",3)
6338 m.insertNextCell(NORM_PENTA18,list(range(18)))
6339 m.checkConsistencyLight()
6341 f=MEDCouplingFieldDouble(ON_NODES)
6343 f.setName("FieldOnPenta18")
6344 f.setArray(DataArrayDouble(list(range(18))))
6345 f.checkConsistencyLight()
6347 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6349 f2=MEDCouplingFieldDouble(ON_NODES)
6351 f2.setName("FieldOnPenta18Sub")
6352 f2.setArray(DataArrayDouble(list(range(18))))
6353 f2.checkConsistencyLight()
6354 WriteField(fname,f2,True)
6356 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6357 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6358 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6362 def testFieldsLinearToQuadratic(self):
6363 fname="Pyfile117.med"
6364 arr=DataArrayDouble([0,1])
6365 m=MEDCouplingCMesh();
6366 m.setCoords(arr,arr,arr)
6367 m=m.buildUnstructured()
6369 m2.translate([2,0,0])
6370 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6374 mmq=mm.linearToQuadratic(0)
6375 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6376 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6378 f=MEDCouplingFieldDouble(ON_NODES)
6382 arr=DataArrayDouble(m3.getNumberOfNodes())
6385 f1ts=MEDFileField1TS()
6386 f1ts.setFieldNoProfileSBT(f)
6387 fmts=MEDFileFieldMultiTS()
6388 fmts.pushBackTimeStep(f1ts)
6389 f1ts_2=f1ts.deepCopy()
6390 f1ts_2.setTime(3,4,5.)
6391 f1ts_2.getUndergroundDataArray()[:]*=2.
6392 fmts.pushBackTimeStep(f1ts_2)
6395 fs2=fs.linearToQuadratic(mms,mmsq)
6396 self.myTester1(fs2,mmsq[0])
6397 # A small Write/Read and test again
6398 mms.write(fname,2) ; fs.write(fname,0)
6399 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6400 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6401 fs2=fs.linearToQuadratic(mms,mmqs)
6402 self.myTester1(fs2,mmqs[0])
6405 def myTester1(self,fs2,mmq):
6406 dataExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,0.,1.,0.,1.,1.,0.,0.,0.,1.,1.,0.,1.,0.,1.,1.,1.,1.,1.,2.,0.,0.,3.,0.,0.,2.,1.,0.,3.,1.,0.,2.,0.,1.,3.,0.,1.,2.,1.,1.,3.,1.,1.,0.5, 0.,0.,0.,0.5, 0.,0.5, 1.,0.,1.,0.5, 0.,0.5, 0.,1.,0.,0.5, 1.,0.5, 1.,1.,1.,0.5, 1.,1.,0.,0.5, 0.,0.,0.5, 0.,1.,0.5, 1.,1.,0.5, 2.5, 0.,0.,2.,0.5, 0.,2.5, 1.,0.,3.,0.5, 0.,2.5, 0.,1.,2.,0.5, 1.,2.5, 1.,1.,3.,0.5, 1.,3.,0.,0.5, 2.,0.,0.5, 2.,1.,0.5, 3.,1.,0.5],40,3)
6407 dataExp1=DataArrayInt([1,0,2,3,5,4,6,7,16,17,18,19,20,21,22,23,24,25,26,27,9,8,10,11,13,12,14,15,28,29,30,31,32,33,34,35,36,37,38,39])
6408 dataExp2=DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0.5,1,2.5,2,4.5,5,6.5,6,3,2,4,5,8.5,9,10.5,10,12.5,13,14.5,14,11,10,12,13])
6409 fToTest=fs2[0][0].field(mmq)
6410 self.assertEqual(fToTest.getTime(),[3.,1,2])
6411 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6412 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6413 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6414 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6415 # testing 2nd timestep
6416 fToTest=fs2[0][1].field(mmq)
6417 self.assertEqual(fToTest.getTime(),[5.,3,4])
6418 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6419 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6420 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6421 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6425 def testFieldsLinearToQuadratic2(self):
6426 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6427 GeneratePyfile18(self)
6428 fname="Pyfile118.med"
6429 arr=DataArrayDouble([0,1])
6430 m=MEDCouplingCMesh();
6431 m.setCoords(arr,arr,arr)
6432 m=m.buildUnstructured()
6434 m2.translate([2,0,0])
6435 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6437 # add a point for fun
6438 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6442 mmq=mm.linearToQuadratic(0)
6443 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6444 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6446 f=MEDCouplingFieldDouble(ON_NODES)
6450 arr=DataArrayDouble(8) ; arr.iota()
6453 f1ts=MEDFileField1TS()
6454 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6455 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6456 f1ts_2=f1ts.deepCopy()
6457 f1ts_2.setTime(3,4,5.)
6458 f1ts_2.getUndergroundDataArray()[:]*=4.
6459 fmts=MEDFileFieldMultiTS()
6460 fmts.pushBackTimeStep(f1ts)
6461 fmts.pushBackTimeStep(f1ts_2)
6464 fs2=fs.linearToQuadratic(mms,mmsq)
6465 mms.write(fname,2) ; fs.write(fname,0)
6467 self.myTester2(fs2,mmq)
6469 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6470 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6471 fs2=fs.linearToQuadratic(mms,mmqs)
6472 self.myTester2(fs2,mmq)
6473 ## More vicious add single node 16
6476 mmq=mm.linearToQuadratic(0)
6477 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6478 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6480 f=MEDCouplingFieldDouble(ON_NODES)
6484 arr=DataArrayDouble(9) ; arr.iota()
6487 f1ts=MEDFileField1TS()
6488 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6489 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6490 fmts=MEDFileFieldMultiTS()
6491 fmts.pushBackTimeStep(f1ts)
6494 fs2=fs.linearToQuadratic(mms,mmsq)
6496 pflExpected=DataArrayInt([8,9,10,11,12,13,14,15,16,29,30,31,32,33,34,35,36,37,38,39,40]) ; pflExpected.setName("pfl_NODE")
6497 f1tsToTest=fs2[0][0]
6498 exp1=DataArrayDouble([0,1,2,3,4,5,6,7,8,0.5,1,2.5,2,4.5,5,6.5,6,3,2,4,5])
6499 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6500 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6501 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6504 def myTester2(self,fs2,mmq):
6505 pflExpected=DataArrayInt([8,9,10,11,12,13,14,15,29,30,31,32,33,34,35,36,37,38,39,40]) ; pflExpected.setName("pfl_NODE")
6506 f1tsToTest=fs2[0][0]
6507 exp1=DataArrayDouble([0,1,2,3,4,5,6,7,0.5,1,2.5,2,4.5,5,6.5,6,3,2,4,5])
6508 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6509 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6510 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6511 fToTest=fs2[0][0].field(mmq)
6512 self.assertEqual(fToTest.getTime(),[3.,1,2])
6513 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6514 self.assertTrue(mTest.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19])))
6515 self.assertTrue(mTest.getCoords().isEqual(DataArrayDouble([(2,0,0),(3,0,0),(2,1,0),(3,1,0),(2,0,1),(3,0,1),(2,1,1),(3,1,1),(2.5,0,0),(2,0.5,0),(2.5,1,0),(3,0.5,0),(2.5,0,1),(2,0.5,1),(2.5,1,1),(3,0.5,1),(3,0,0.5),(2,0,0.5),(2,1,0.5),(3,1,0.5)],20,3),1e-12))
6516 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6518 f1tsToTest=fs2[0][1]
6519 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6520 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6521 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6522 fToTest=fs2[0][1].field(mmq)
6523 self.assertEqual(fToTest.getTime(),[5.,3,4])
6524 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6525 self.assertTrue(mTest.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19])))
6526 self.assertTrue(mTest.getCoords().isEqual(DataArrayDouble([(2,0,0),(3,0,0),(2,1,0),(3,1,0),(2,0,1),(3,0,1),(2,1,1),(3,1,1),(2.5,0,0),(2,0.5,0),(2.5,1,0),(3,0.5,0),(2.5,0,1),(2,0.5,1),(2.5,1,1),(3,0.5,1),(3,0,0.5),(2,0,0.5),(2,1,0.5),(3,1,0.5)],20,3),1e-12))
6527 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6532 def testSetFieldProfileFlatly1(self):
6533 """ Sometimes for downstream code fan of profiles, profile are requested unconditionally. setFieldProfile try to reduce at most profile usage. So setFieldProfileFlatly has been added to always create
6535 arr=DataArrayDouble(10) ; arr.iota()
6536 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6537 m=m.buildUnstructured()
6540 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6544 f=MEDCouplingFieldDouble(ON_CELLS)
6546 arr=DataArrayDouble(m.getNumberOfCells())
6550 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6552 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6553 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6555 f1ts=MEDFileField1TS()
6556 f1ts.setFieldProfile(f,mm,0,pfl)
6557 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6558 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6559 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6561 f1ts=MEDFileField1TS()
6562 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6563 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6564 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6565 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6566 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6567 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6571 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6572 """ Here multi level groups are created"""
6573 arr=DataArrayDouble(11) ; arr.iota()
6574 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6575 m=m.buildUnstructured()
6577 m1=m.buildDescendingConnectivity()[0]
6582 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6583 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6584 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6585 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6586 ################ ajouter un groupe sur plusieurs niveau
6588 mm.addGroup(-1,grp2)
6589 mm.addGroup(0,grp0_0)
6590 mm.addGroup(-1,grp0_1)
6591 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6592 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6593 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6594 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6595 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6596 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6597 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6598 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6599 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6600 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6601 mm.removeGroupAtLevel(0,grpName)
6602 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6603 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6604 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6605 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6606 mm.removeGroupAtLevel(-1,grpName)
6607 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6608 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6609 mm.addGroup(-1,grp0_1)
6610 mm.addGroup(0,grp0_0)
6611 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6612 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6613 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6614 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6615 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6619 def testYutaka(self):
6620 """ Thank you to Yutaka Nishizawa for having report this bug. At level -1, adding a first group on all entities leads to a group lying on family 0...
6621 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6623 m=MEDCouplingCMesh()
6624 arr=DataArrayDouble(4) ; arr.iota()
6625 m.setCoords(arr,arr,arr)
6626 m=m.buildUnstructured()
6629 m=m.buildUnstructured()
6630 m1=m.buildDescendingConnectivity()[0]
6636 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6638 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6640 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6642 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6643 mm.addGroup(-1,grp3)
6644 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6645 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6646 mm.addNodeGroup(grp4)
6647 mm.rearrangeFamilies()
6648 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6649 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6650 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6651 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6652 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6654 for grp in [grp0,grp1,grp2,grp3,grp4]:
6655 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6660 def testContxtMger1TS(self):
6661 fname="Pyfile119.med"
6662 coo=DataArrayDouble(1000) ; coo.iota()
6663 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6665 WriteMesh(fname,m,True)
6666 f=MEDCouplingFieldDouble(ON_CELLS)
6669 arr=DataArrayDouble(m.getNumberOfCells())
6671 f.checkConsistencyLight()
6674 f.setTime(float(i),i,0)
6675 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6678 mm=MEDFileMesh.New(fname)
6679 fmts=MEDFileFieldMultiTS(fname,False)
6680 refSize=fmts.getHeapMemorySize()
6686 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6689 def testZipFamilies1(self):
6691 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6694 arr=DataArrayDouble(10) ; arr.iota()
6695 m=MEDCouplingCMesh()
6696 m.setCoords(arr,arr)
6697 m=m.buildUnstructured()
6702 for i in range(m.getNumberOfCells()):
6703 d = DataArrayInt([i])
6704 d.setName("grp%d"%i)
6708 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6709 grp_all.setName("grp_all")
6710 mm.addGroup(0,grp_all)
6711 for i in range(m.getNumberOfCells()):
6712 mm.removeGroup("grp{}".format(i))
6715 mm.zipFamilies() # the method to test
6717 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6718 self.assertEqual(len(mm.getFamiliesNames()),1)
6719 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6722 def testZipFamilies2(self):
6724 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6727 arr=DataArrayDouble(21) ; arr.iota()
6728 m=MEDCouplingCMesh()
6730 m=m.buildUnstructured()
6735 # 1 and 3 to be merged
6736 # 2 and 5 to be merged
6737 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6738 for i in range(1,9):
6739 mm.setFamilyId("Fam_{}".format(i),-i)
6740 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6741 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6742 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6744 grp0=DataArrayInt([0,1,3,8,10,19])
6745 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6746 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6747 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6748 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6749 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6750 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6752 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6753 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6754 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6755 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6756 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6759 def testMeshConvertFromMEDFileGeoType(self):
6760 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6763 def testFieldInt64_0(self):
6765 Small basic test with I/O of field in int64.
6767 fname="Pyfile120.med"
6768 arr = DataArrayDouble([0,1])
6769 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6770 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6771 v = 1234567890123456
6772 f.setArray(DataArrayInt64([v]))
6776 f1ts = MEDFileInt64Field1TS()
6777 f1ts.setFieldNoProfileSBT(f)
6778 fmts = MEDFileInt64FieldMultiTS()
6779 fmts.pushBackTimeStep(f1ts)
6780 fs = MEDFileFields()
6785 mm = MEDFileMesh.New(fname)
6786 fs = MEDFileFields(fname)
6787 f = fs[0][0].field(mm)
6788 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6789 self.assertEqual( f.getArray().getIJ(0,0) , v )
6792 def testNonRegUMeshSubParts(self):
6794 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6796 fname = "Pyfile121.med"
6797 m0 = MEDCouplingUMesh("mesh",1)
6798 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6799 m0.setCoords(coords)
6801 m0.insertNextCell(NORM_SEG2,[1,2])
6804 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6805 m1.setCoords(m0.getCoords())
6806 m1.setNodalConnectivity(DataArrayInt([1,2]))
6807 m1.setName(m0.getName())
6809 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6810 mm.zipCoords() # <- This call changes the coords and connectivity
6813 mm = MEDFileMesh.New(fname)
6814 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6815 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6820 if __name__ == "__main__":