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)
291 mm.setMeshAtLevel(-1,m1,True);
292 mm.setMeshAtLevel(0,m,True);
293 mm.setMeshAtLevel(-2,m2,True);
294 mm.removeMeshAtLevel(-2)
295 mm.setMeshAtLevel(-2,m2,True);
296 # playing with groups
297 g1_2=DataArrayInt.New()
298 g1_2.setValues([2,3],2,1)
300 g2_2=DataArrayInt.New()
301 g2_2.setValues([2,0,3],3,1)
303 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
304 g1_1=DataArrayInt.New()
305 g1_1.setValues([0,2,1],3,1)
307 g2_1=DataArrayInt.New()
308 g2_1.setValues([0,2],2,1)
310 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
311 g1_N=DataArrayInt.New()
312 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
314 g2_N=DataArrayInt.New()
315 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
317 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
318 # check content of mm
319 t=mm.getGroupArr(0,"G1",True)
320 self.assertTrue(g1_2.isEqual(t));
321 t=mm.getGroupArr(0,"G2",True)
322 self.assertTrue(g2_2.isEqual(t));
323 t=mm.getGroupArr(-1,"G1",True)
324 self.assertTrue(g1_1.isEqual(t));
325 t=mm.getGroupArr(-1,"G2",True)
326 self.assertTrue(g2_1.isEqual(t));
327 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
329 mm.write(outFileName,2);
330 mm2=MEDFileMesh.New(outFileName)
331 res=mm.isEqual(mm2,1e-12)
332 self.assertTrue(res[0])
333 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
334 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
335 mm2.keepFamIdsOnlyOnLevs([3],[-1])
336 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
337 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
339 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
340 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
342 self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
343 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
344 self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
345 self.assertTrue(not mm2.existsFamily("Family_-8"))
346 mm2.createGroupOnAll(-1,"GrpOnAllFace")
347 self.assertTrue(mm2.existsFamily("Family_-8"))
348 self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
351 #testing persistence of retrieved arrays
353 def testMEDMesh5(self):
354 GeneratePyfile18(self)
355 fileName="Pyfile18.med"
356 mname="ExampleOfMultiDimW"
357 medmesh=MEDFileUMesh.New(fileName,mname)
358 m1_0=medmesh.getLevel0Mesh(True)
359 da1=medmesh.getFamilyFieldAtLevel(0)
361 self.assertEqual(20,m1_0.getNumberOfCells())
362 self.assertEqual(20,da1.getNumberOfTuples())
365 def internalMEDMesh6(self):
366 outFileName="MEDFileMesh5.med"
369 m1=MEDCouplingCMesh.New();
370 da=DataArrayDouble.New()
371 da.setValues([0.,1.,2.],3,1)
372 da.setInfoOnComponent(0,"XX [mm]")
374 da=DataArrayDouble.New()
375 da.setValues([0.,1.2],2,1)
376 da.setInfoOnComponent(0,"YY [km]")
378 da=DataArrayDouble.New()
379 da.setValues([0.,1.3],2,1)
380 da.setInfoOnComponent(0,"ZZ [um]")
383 self.assertTrue(m[0].isEqual(m1,1e-12))
384 self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
385 m.setName("myFirstCartMesh")
386 m.setDescription("mmmmpppppppp")
389 da=DataArrayInt.New()
390 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
391 m.setFamilyFieldArr(1,da)
392 m.setFamilyId("family1",1)
393 da=m.getFamilyArr(1,"family1")
395 self.assertEqual(expected1,da.getValues())
396 self.assertTrue(m.getUnivNameWrStatus())
397 m.write(outFileName,2);
398 mm=MEDFileMesh.New(outFileName)
399 self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
400 self.assertTrue(isinstance(mm,MEDFileCMesh))
401 self.assertTrue(isinstance(mm.getUnivName(),str))
402 self.assertTrue(len(mm.getUnivName())!=0)
403 self.assertTrue(m.isEqual(mm,1e-12)[0])
404 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
407 m1.setTime(tt[2],tt[0],tt[1])
408 m1.setName(m.getName())
409 m1.setTimeUnit(m.getTimeUnit())
410 m1.setDescription(m.getDescription())
411 self.assertTrue(m2.isEqual(m1,1e-12));
414 def testMEDMesh6(self):
415 self.internalMEDMesh6()
419 def testMEDMesh7(self):
420 fileName="Pyfile24.med"
421 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
423 m.setCoords(m2.getCoords())
424 m.setMeshAtLevel(0,m2)
425 m.setMeshAtLevel(-1,m1)
426 m.setMeshAtLevel(-2,m0)
427 m.setFamilyFieldArr(0,f2)
428 m.setFamilyFieldArr(-1,f1)
429 m.setFamilyFieldArr(-2,f0)
430 m.setFamilyFieldArr(1,p)
431 m.setRenumFieldArr(0,n2)
432 m.setRenumFieldArr(-1,n1)
433 m.setRenumFieldArr(-2,n0)
435 for i in range(nbOfFams):
436 m.addFamily(fns[i],fids[i])
439 for i in range(nbOfGrps):
440 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
442 m.setName(m2.getName())
443 m.setDescription(m2.getDescription())
445 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
446 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
447 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
448 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
449 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
450 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
451 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
452 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
453 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
456 self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
459 def funcToTestDelItem(self,ff):
463 #emulation of pointe.med file.
465 def testMEDField1(self):
466 TestMultiFieldShuffleRW1(self)
467 mm=MEDFileMesh.New("Pyfile17.med")
468 mm.write("Pyfile17_bis.med",2)
469 ff=MEDFileFieldMultiTS("Pyfile17.med")
470 tsExpected=[[1,2],[3,4],[5,6]]
471 self.assertEqual(3,len(ff))
472 for pos,f1ts in enumerate(ff):
473 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
474 self.assertEqual(type(f1ts),MEDFileField1TS)
476 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
477 self.assertEqual([3,4],ff[1].getTime()[:-1])
478 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
479 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
480 ff.write("Pyfile17_bis.med",0)
482 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
483 self.assertEqual([(1,2),(3,4),(5,6)],ts)
484 self.funcToTestDelItem(ff)
485 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
486 self.assertEqual([(1,2)],ts)
491 def testMEDField2(self):
492 GeneratePyfile19(self)
493 mm=MEDFileMesh.New("Pyfile19.med")
494 mm.write("Pyfile19_bis.med",2)
495 ff=MEDFileFieldMultiTS.New("Pyfile19.med")
496 ff.write("Pyfile19_bis.med",0)
497 self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
502 def testMEDField3(self):
503 GeneratePyfile13(self)
504 mm=MEDFileMesh.New("Pyfile13.med")
505 mm.write("Pyfile13_bis.med",2)
506 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
507 ff.write("Pyfile13_bis.med",0)
508 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
509 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
510 f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
511 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
512 ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
513 f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
514 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
515 ff4=MEDFileField1TS.New("Pyfile13.med")
516 f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
517 self.assertTrue(f.isEqual(f4,1e-12,1e-12))
522 def testMEDField4(self):
523 GeneratePyfile14(self)
524 mm=MEDFileMesh.New("Pyfile14.med")
525 mm.write("Pyfile14_bis.med",2)
526 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
527 ff.write("Pyfile14_bis.med",0)
528 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
529 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
530 f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
531 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
534 # MEDField get/set on pointe.med
536 def testMEDField5(self):
537 TestMultiFieldShuffleRW1(self)
538 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
539 f=ff.getFieldAtLevel(ON_CELLS,0)
540 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
541 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
542 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
543 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
544 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
545 # no with renumbering
546 f=ff.getFieldAtLevel(ON_CELLS,0,1)
547 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
548 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
549 f=ff.getFieldAtLevel(ON_CELLS,0,3)
550 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
551 f=ff.getFieldAtLevel(ON_CELLS,0,2)
552 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
553 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
554 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
557 # MEDField get/set on profiles nodes
559 def testMEDField6(self):
560 GeneratePyfile7(self)
561 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
562 its=ff.getIterations()
563 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
564 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
565 f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
566 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
567 GeneratePyfile19(self)
568 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
569 its=ff.getIterations()
570 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
571 f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
572 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
573 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
574 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
577 # MEDField get/set on profiles cells
579 def testMEDField7(self):
580 GeneratePyfile12(self)
581 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
582 its=ff.getIterations()
583 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
584 f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
585 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
588 #first test of assignation. No profile and types sorted by type.
590 def testMEDField8(self):
592 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
594 mm1=MEDFileUMesh.New()
595 mm1.setCoords(m1.getCoords())
596 mm1.setMeshAtLevel(0,m1)
597 mm1.setName(m1.getName())
599 ff1=MEDFileField1TS.New()
600 ff1.setFieldNoProfileSBT(f1)
602 f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
603 itt,orr,ti=ff1.getTime()
604 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
605 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
607 itt,orr,ti=ff1.getTime()
608 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
610 ff1.copyTimeInfoFrom(f1)
611 itt,orr,ti=ff1.getTime()
612 self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
613 da,infos=ff1.getUndergroundDataArrayExt()
614 f2.getArray().setName(da.getName())#da has the same name than f2
615 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
616 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
619 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
621 mm1=MEDFileUMesh.New()
622 mm1.setCoords(m1.getCoords())
623 mm1.setMeshAtLevel(0,m1)
624 mm1.setName(m1.getName())
626 ff1=MEDFileField1TS.New()
627 ff1.setFieldNoProfileSBT(f1)
629 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
631 f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
632 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
633 f1.getArray().setIJ(0,0,nv)
634 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
637 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
639 mm1=MEDFileUMesh.New()
640 mm1.setCoords(m1.getCoords())
641 mm1.setMeshAtLevel(0,m1)
642 mm1.setName(m1.getName())
644 ff1=MEDFileField1TS.New()
645 ff1.setFieldNoProfileSBT(f1)
647 f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
648 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
649 da,infos=ff1.getUndergroundDataArrayExt()
650 f2.getArray().setName(da.getName())#da has the same name than f2
651 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
652 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
655 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
656 f1InvalidCpy=f1.deepCopy()
657 f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
658 f1InvalidCpy2=f1.deepCopy()
659 f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
661 mm1=MEDFileUMesh.New()
662 mm1.setCoords(m1.getCoords())
663 mm1.setMeshAtLevel(0,m1)
664 mm1.setName(m1.getName())
666 ff1=MEDFileField1TS.New()
667 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
668 f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
669 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
670 ff1.setFieldNoProfileSBT(f1)
672 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
673 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
674 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
675 sbt=ff2.getFieldSplitedByType2()
676 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
677 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
678 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
679 self.assertEqual(6,loc1.getNumberOfPointsInCells())
680 self.assertEqual(3,loc1.getNumberOfGaussPoints())
681 self.assertEqual(2,loc1.getDimension())
682 da,infos=ff2.getUndergroundDataArrayExt()
683 f2.getArray().setName(da.getName())#da has the same name than f2
684 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
685 self.assertEqual(53,da.getNumberOfTuples())
686 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)
691 def testMEDFileData1(self):
695 m1=MEDLoaderDataForTest.build1DMesh_1()
696 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
697 mmm1=MEDFileMeshMultiTS.New() ;
698 mmm1.setOneTimeStep(mm1)
699 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
700 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
701 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
702 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
704 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
705 self.assertEqual(name,mmm.getName())
706 self.assertEqual(type(mmm),MEDFileUMesh)
708 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
710 ff1=MEDFileFieldMultiTS.New()
711 ff21=MEDFileFieldMultiTS.New()
712 ff22=MEDFileFieldMultiTS.New()
713 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
714 f1.getArray().setInfoOnComponent(0,"power [kW]")
715 ff1.appendFieldNoProfileSBT(f1)
716 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
717 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
718 ff21.appendFieldNoProfileSBT(f21)
719 f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
720 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
721 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
722 ff22.appendFieldNoProfileSBT(f22)
723 fs=MEDFileFields.New()
724 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
725 for name,fmts in zip(["f1","f21","f22"],fs):
726 self.assertEqual(name,fmts.getName())
730 fname2="Pyfile29_2.med"
733 d2=MEDFileData.New(fname2)
734 self.assertEqual(2,d2.getNumberOfMeshes())
735 self.assertEqual(3,d2.getNumberOfFields())
736 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
737 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
738 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
739 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
740 self.assertTrue(m1.isEqual(m1bis,1e-12))
741 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
742 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
743 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
744 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
745 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
749 def testMEDField9(self):
750 # first test field profile WR. Full type but with some type missing
752 m1=MEDLoaderDataForTest.build2DMesh_3()
753 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
755 ff1=MEDFileField1TS.New()
756 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
757 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
758 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.
759 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
761 ff1.setFieldProfile(f1,mm1,0,da)
762 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
766 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
767 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
768 self.assertTrue(vals.isEqual(d,1e-14))
770 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
771 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772 ff2.deepCpyGlobs(ff3)
773 sbt=ff2.getFieldSplitedByType2()
774 self.assertEqual(3,sbt[0][0])#TRI3
775 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
776 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
777 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
778 self.assertEqual(4,sbt[1][0])#QUAD4
779 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
780 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
781 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
782 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
783 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
784 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
785 self.assertTrue(vals.isEqual(d,1e-14))
789 def testMEDField10(self):
791 m1=MEDLoaderDataForTest.build2DMesh_1()
792 m1.renumberCells([0,1,4,2,3,5],False)
793 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
795 ff1=MEDFileFieldMultiTS.New()
796 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
797 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
798 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.
799 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
801 ff1.appendFieldProfile(f1,mm1,0,da)
802 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
803 ff1.appendFieldProfile(f1,mm1,0,da)
807 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
808 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
809 self.assertTrue(vals.isEqual(e,1e-14))
810 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
811 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
812 self.assertTrue(vals.isEqual(d,1e-14))
814 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
815 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
816 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
817 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
818 self.assertTrue(vals.isEqual(e,1e-14))
819 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
820 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
821 self.assertTrue(vals.isEqual(d,1e-14))
824 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
826 def testMEDField11(self):
828 m1=MEDLoaderDataForTest.build2DMesh_1()
829 m1.renumberCells([0,1,4,2,3,5],False)
830 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832 ff1=MEDFileField1TS.New()
833 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
834 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
835 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.
836 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
838 ff1.setFieldProfile(f1,mm1,0,da)
839 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
842 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
843 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
844 self.assertTrue(vals.isEqual(d,1e-14))
846 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
847 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
848 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
849 self.assertTrue(vals.isEqual(d,1e-14))
853 def testMEDField12(self):
855 m1=MEDLoaderDataForTest.build2DMesh_1()
856 m1.renumberCells([0,1,4,2,3,5],False)
857 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
859 ff1=MEDFileFieldMultiTS.New()
860 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
861 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
862 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.
863 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
865 ff1.appendFieldProfile(f1,mm1,0,da)
866 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
867 ff1.appendFieldProfile(f1,mm1,0,da)
870 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
871 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
872 self.assertTrue(vals.isEqual(e,1e-14))
873 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
874 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
875 self.assertTrue(vals.isEqual(d,1e-14))
877 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
878 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
879 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
880 self.assertTrue(vals.isEqual(e,1e-14))
881 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
882 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
883 self.assertTrue(vals.isEqual(d,1e-14))
887 def testMEDField13(self):
889 m1=MEDLoaderDataForTest.build2DMesh_1()
890 m1.renumberCells([0,1,4,2,3,5],False)
892 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
893 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
895 ff1=MEDFileField1TS.New()
896 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
897 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
898 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.
899 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
901 ff1.setFieldProfile(f1,mm1,0,da)
904 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
905 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
906 self.assertTrue(vals.isEqual(d,1e-14))
908 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
909 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
910 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
911 self.assertTrue(vals.isEqual(d,1e-14))
915 def testMEDField14(self):
917 m1=MEDLoaderDataForTest.build2DMesh_1()
918 m1.renumberCells([0,1,4,2,3,5],False)
920 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
921 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
923 ff1=MEDFileFieldMultiTS.New()
924 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
925 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
926 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.
927 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
929 ff1.appendFieldProfile(f1,mm1,0,da)
930 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
931 ff1.appendFieldProfile(f1,mm1,0,da)
934 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
935 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
936 self.assertTrue(vals.isEqual(d,1e-14))
937 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
938 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
939 self.assertTrue(vals.isEqual(e,1e-14))
940 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
942 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
943 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
944 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
945 self.assertTrue(vals.isEqual(d,1e-14))
946 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
947 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
948 self.assertTrue(vals.isEqual(e,1e-14))
950 # 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.
951 # 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
952 # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
954 def testMEDField15(self):
956 m0=MEDLoaderDataForTest.build2DMesh_1()
957 m0.renumberCells([0,1,4,2,3,5],False)
959 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
960 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
961 ff1=MEDFileField1TS.New()
962 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
963 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
964 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.
965 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
967 ff1.setFieldProfile(f1,mm1,0,da)
968 m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
971 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
972 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
973 self.assertTrue(p1.isIota(5))
974 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
976 # Test for getFieldAtTopLevel method
978 def testMEDField16(self):
980 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
982 mm1=MEDFileUMesh.New()
983 mm1.setCoords(m1.getCoords())
984 mm1.setMeshAtLevel(0,m1)
985 mm1.setName(m1.getName())
986 ff1=MEDFileField1TS.New()
987 ff1.setFieldNoProfileSBT(f1)
988 m2=m1.buildDescendingConnectivity()[0]
989 m2.sortCellsInMEDFileFrmt()
990 m2.setName(m1.getName())
991 mm1.setMeshAtLevel(-1,m2)
993 f2=m2.getMeasureField(True)
994 dd=DataArrayDouble.New()
995 dd.alloc(f2.getArray().getNumberOfTuples(),3)
996 dd[:,0]=f2.getArray()
997 dd[:,1]=2*f2.getArray()
998 dd[:,2]=3*f2.getArray()
999 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1001 f2.copyTinyStringsFrom(f1)
1002 f2.copyTinyAttrFrom(f1)
1003 ff1.setFieldNoProfileSBT(f2)
1005 # Reading Pyfile37.med
1006 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1007 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1008 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1009 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1010 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1011 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1012 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1014 fname="Pyfile38.med"
1016 ff1=MEDFileField1TS.New()
1017 ff1.setFieldNoProfileSBT(f2)
1019 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1020 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1021 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1024 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1026 def testMEDField17(self):
1027 fname="Pyfile39.med"
1028 m1=MEDLoaderDataForTest.build2DMesh_1()
1029 m1.renumberCells([0,1,4,2,3,5],False)
1030 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1032 ffs=MEDFileFields.New()
1033 ff1=MEDFileFieldMultiTS.New()
1034 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1035 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1036 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.
1037 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1039 ff1.appendFieldProfile(f1,mm1,0,da)
1040 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1041 ff1.appendFieldProfile(f1,mm1,0,da)
1043 ffs.setFieldAtPos(0,ff1)
1047 ffsr=MEDFileFields.New(fname)
1048 ff3=ffsr.getFieldAtPos(0)
1049 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1050 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1053 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1055 def testMEDField18(self):
1056 fname="Pyfile40.med"
1057 m1=MEDLoaderDataForTest.build2DMesh_1()
1058 m1.renumberCells([0,1,4,2,3,5],False)
1059 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1061 ffs=MEDFileFields.New()
1062 ff1=MEDFileFieldMultiTS.New()
1063 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1064 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1065 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.
1066 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1068 ff1.appendFieldProfile(f1,mm1,0,da)
1069 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1070 ff1.appendFieldProfile(f1,mm1,0,da)
1074 ffsr=MEDFileFields.New(fname)
1075 ff3=ffsr.getFieldAtPos(0)
1076 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1077 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1081 def testMEDFieldBug1(self):
1082 GeneratePyfile13(self)
1083 fname="Pyfile13.med"
1084 d=MEDFileData.New(fname)
1085 self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1089 def testMEDMesh8(self):
1090 m=MEDLoaderDataForTest.build1DMesh_1()
1091 m.convertQuadraticCellsToLinear()
1092 mm=MEDFileUMesh.New()
1093 mm.setMeshAtLevel(0,m)
1094 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1095 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1096 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1097 mm.setGroupsAtLevel(0,[g1,g2],False)
1098 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1099 self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1100 self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1101 self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1102 mm.assignFamilyNameWithGroupName()
1103 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1104 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1105 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1106 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1108 mm=MEDFileUMesh.New()
1109 mm.setMeshAtLevel(0,m)
1110 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1111 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1112 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1113 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1114 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1115 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1116 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1117 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1118 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1119 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1120 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1121 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1122 mm.changeFamilyId(5,6)
1123 g=mm.getGroupArr(0,"g3")
1124 self.assertTrue(g.isEqual(g3));
1125 g=mm.getGroupArr(0,"g2")
1126 self.assertTrue(g.isEqual(g2));
1127 g=mm.getGroupArr(0,"g1")
1128 self.assertTrue(g.isEqual(g1));
1131 # bug detected by gauthier
1133 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1134 fname="Pyfile41.med"
1135 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1137 mm1=MEDFileUMesh.New()
1138 mm1.setCoords(m1.getCoords())
1139 mm1.setMeshAtLevel(0,m1)
1141 ff1=MEDFileField1TS.New()
1142 ff1.setFieldNoProfileSBT(f1)
1144 # writing mesh1 and field1, now creation of mesh2 and field2
1147 m2.translate([0.5,0.6,0.7])
1148 m2.setName("3DSurfMesh_2")
1149 f2.getArray()[:]*=2.
1150 f2.setName("VectorFieldOnCells2")
1151 mm2=MEDFileUMesh.New()
1152 mm2.setCoords(m2.getCoords())
1153 mm2.setMeshAtLevel(0,m2)
1155 ff2=MEDFileField1TS.New()
1156 ff2.setFieldNoProfileSBT(f2)
1159 f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1160 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1161 f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1162 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1166 def testMEDLoaderMultiLevelCellField1(self):
1167 fname="Pyfile42.med"
1168 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1169 m=MEDFileUMesh.New()
1170 m.setCoords(m2.getCoords())
1171 m.setMeshAtLevel(0,m2)
1172 m.setMeshAtLevel(-1,m1)
1173 m.setMeshAtLevel(-2,m0)
1177 compNames1=["comp1","comp2","comp3"]
1178 ff1=MEDFileField1TS.New()
1179 da2=DataArrayDouble.New()
1180 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1182 da2.rearrange(len(compNames1))
1183 da2.setInfoOnComponents(compNames1)
1184 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1185 ff1.setFieldNoProfileSBT(f2)
1186 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1187 da0=DataArrayDouble.New()
1188 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1190 da0.rearrange(len(compNames1))
1191 da0.setInfoOnComponents(compNames1)
1192 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1193 ff1.setFieldNoProfileSBT(f0)
1194 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1195 da1=DataArrayDouble.New()
1196 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1198 da1.rearrange(len(compNames1))
1199 da1.setInfoOnComponents(compNames1)
1200 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1201 ff1.setFieldNoProfileSBT(f1)
1202 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1207 compNames2=["comp11","comp22"]
1208 ff2=MEDFileField1TS.New()
1209 da0=DataArrayDouble.New()
1210 da0.alloc(m0.getNumberOfCells()*2,1)
1213 da0.setInfoOnComponents(compNames2)
1214 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1215 ff2.setFieldNoProfileSBT(f0)
1216 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1217 da1=DataArrayDouble.New()
1218 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1220 da1.rearrange(len(compNames2))
1221 da1.setInfoOnComponents(compNames2)
1222 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1223 ff2.setFieldNoProfileSBT(f1)
1224 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1228 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1229 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1230 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1231 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1232 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1233 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1237 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1238 fname="Pyfile43.med"
1239 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1240 m=MEDFileUMesh.New()
1241 m.setMeshAtLevel(0,m2)
1242 m.setMeshAtLevel(-1,m1)
1243 m.setMeshAtLevel(-2,m0)
1244 f=MEDFileField1TS.New()
1245 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1246 ff.setName("NodeFieldPfl")
1247 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1249 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1250 f.setFieldProfile(ff,m,-2,pfl)
1251 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1252 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1253 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1254 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1255 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1256 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1257 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1258 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1259 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1260 expected1=[1.,10.,100.,2.,20.,200.]
1261 nodeCoordsWithValue1=[10.,2.5,0.]
1262 nodeCoordsWithValue2=[10.,3.75,0.]
1264 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1265 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1268 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1272 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1273 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1274 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1275 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1276 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1277 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1278 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1279 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1280 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1282 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1287 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1288 f=MEDFileField1TS.New()
1289 f.setFieldProfile(ff,m,-2,pfl)
1290 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1291 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1292 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1293 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1294 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1295 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1296 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1297 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1298 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1299 expected2=[2.,20.,200.,1.,10.,100.]
1301 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1302 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1305 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1308 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1309 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1310 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1311 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1312 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1313 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1314 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1315 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1316 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1318 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1323 def testBuildInnerBoundaryAlongM1Group1(self):
1324 fname="Pyfile44.med"
1325 m=MEDCouplingCMesh.New()
1326 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1327 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1328 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1329 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1330 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1331 m2.setName(m.getName())
1332 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1333 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1334 mm=MEDFileUMesh.New()
1335 mm.setMeshAtLevel(0,m)
1336 mm.setMeshAtLevel(-1,m2)
1337 mm.setGroupsAtLevel(-1,[grp,grp2])
1338 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1339 mm.setGroupsAtLevel(1,[grpNode])
1340 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1341 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1342 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1344 self.assertEqual(30,mm.getNumberOfNodes())
1345 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1346 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1348 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1349 self.assertEqual([15,16,17],nodes.getValues());
1350 self.assertEqual([7,8,9],cells.getValues());
1351 self.assertEqual([12,13,14],cells2.getValues());
1352 self.assertEqual(33,mm.getNumberOfNodes())
1353 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1354 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1355 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1356 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1357 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
1358 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1359 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
1360 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1361 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])
1362 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1363 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1365 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1366 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1367 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1368 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1369 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1374 def testBuildInnerBoundaryAlongM1Group2(self):
1375 fname="Pyfile45.med"
1376 m=MEDCouplingCMesh.New()
1377 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1378 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1379 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1380 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1381 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1382 m2.setName(m.getName())
1383 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1384 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1385 mm=MEDFileUMesh.New()
1386 mm.setMeshAtLevel(0,m)
1387 mm.setMeshAtLevel(-1,m2)
1388 mm.setGroupsAtLevel(-1,[grp,grp2])
1389 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1390 mm.setGroupsAtLevel(1,[grpNode])
1391 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1392 ref1=[4,9,8,14,15,4,10,9,15,16]
1393 ref2=[4,9,8,14,30,4,10,9,30,16]
1395 self.assertEqual(30,mm.getNumberOfNodes())
1396 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1397 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1399 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1400 self.assertEqual([15],nodes.getValues());
1401 self.assertEqual([7,8],cells.getValues());
1402 self.assertEqual([12,13],cells2.getValues());
1403 self.assertEqual(31,mm.getNumberOfNodes())
1404 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1405 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1406 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1407 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1408 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
1409 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1410 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
1411 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1412 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])
1413 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1414 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1416 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1417 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1418 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1419 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1420 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1425 def testBuildInnerBoundaryAlongM1Group3(self):
1426 """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1427 fname = "Pyfile73.med"
1428 m = MEDCouplingCMesh.New()
1429 m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1430 m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1431 m = m.buildUnstructured(); m.setName("simple")
1432 m2 = m.buildDescendingConnectivity()[0]
1433 m2.setName(m.getName())
1435 # A crack in two non connected parts of the mesh:
1436 grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1438 mm = MEDFileUMesh.New()
1439 mm.setMeshAtLevel(0,m)
1440 mm.setMeshAtLevel(-1,m2)
1441 mm.setGroupsAtLevel(-1,[grpSeg])
1442 nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1443 self.assertEqual([1,13],nodes.getValues());
1444 self.assertEqual([0,6],cellsMod.getValues());
1445 self.assertEqual([1,7],cellsNotMod.getValues());
1446 self.assertEqual(17,mm.getNumberOfNodes())
1447 self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1448 self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1449 ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1450 ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1451 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1452 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1453 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
1454 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1456 refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1457 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1458 self.assertTrue(delta.getMaxValue()[0]<1e-10)
1460 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1461 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1462 refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1463 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1464 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1468 def testBuildInnerBoundaryAlongM1Group4(self):
1469 """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1471 coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1472 0.,1., 1.,1., 2.,1., 3.,1.,
1473 0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1474 conn = [3,0,4,1, 3,1,4,5,
1481 connI = DataArrayInt()
1482 connI.alloc(13, 1); connI.iota(); connI *= 4
1483 m2 = MEDCouplingUMesh("2D", 2)
1485 m2.setConnectivity(DataArrayInt(conn), connI)
1486 m2.checkConsistency()
1487 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1488 grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1489 grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1490 mfu = MEDFileUMesh()
1491 mfu.setMeshAtLevel(0, m2)
1492 mfu.setMeshAtLevel(-1, m1)
1493 mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1494 nNod = m2.getNumberOfNodes()
1495 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1496 m2_bis = mfu.getMeshAtLevel(0)
1497 m2_bis.checkConsistency()
1498 m1_bis = mfu.getMeshAtLevel(-1)
1499 m1_bis.checkConsistency()
1500 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1501 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1502 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1503 self.assertEqual([6,7], nodesDup.getValues())
1504 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1505 self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1506 self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1507 self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1508 self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1509 self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1510 # mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1511 ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1512 ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1513 self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1514 self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1515 self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1516 mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1517 m_bis0 = mfu.getMeshAtLevel(-1)
1518 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1519 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1522 def testBuildInnerBoundary5(self):
1523 """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1524 of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1525 coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1526 200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1527 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1528 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1529 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1530 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1531 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1532 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1533 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1534 97.16750463405486, 97.18018457127863], 46, 3)
1535 c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1536 39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1537 21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1538 14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1539 17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1540 24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1541 44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1542 44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1543 29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1544 21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1546 cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1547 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1548 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1549 m3 = MEDCouplingUMesh("3D", 3)
1551 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1552 m3.checkConsistency()
1553 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1554 grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1555 mfu = MEDFileUMesh()
1556 mfu.setMeshAtLevel(0, m3)
1557 mfu.setMeshAtLevel(-1, m2)
1558 grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1559 mfu.setGroupsAtLevel(0, [grpIds3D]) # just to check preservation of 3D group
1560 mfu.setGroupsAtLevel(-1, [grpIds])
1561 nNod = m3.getNumberOfNodes()
1562 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1563 m3_bis = mfu.getMeshAtLevel(0)
1564 m3_bis.checkConsistency()
1565 m2_bis = mfu.getMeshAtLevel(-1)
1566 m2_bis.checkConsistency()
1567 self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1568 self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1569 self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1570 self.assertEqual([3], nodesDup.getValues())
1571 self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1572 self.assertEqual(set([22]), set(cells1.getValues()))
1573 self.assertEqual(set([77]), set(cells2.getValues()))
1574 self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1575 self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1576 self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1577 m_bis0 = mfu.getMeshAtLevel(-1)
1578 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1579 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1583 def testBasicConstructors(self):
1584 GeneratePyfile18(self)
1585 fname="Pyfile18.med"
1586 TestWriteUMeshesRW1(self)
1587 m=MEDFileMesh.New(fname)
1588 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1589 m=MEDFileMesh.New(fname)
1590 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1591 m=MEDFileUMesh(fname)
1593 self.internalMEDMesh6()
1594 m=MEDFileCMesh("MEDFileMesh5.med")
1595 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1597 m=MEDFileMeshMultiTS()
1598 m=MEDFileMeshMultiTS(fname)
1599 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1601 m=MEDFileMeshes(fname)
1603 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1604 m=MEDFileFieldMultiTS()
1605 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1607 m=MEDFileFields(fname)
1609 m=MEDFileData(fname)
1611 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1612 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1613 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1614 m=MEDCouplingCMesh()
1615 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1616 m=MEDCouplingFieldTemplate(ON_NODES)
1617 m=MEDCouplingMultiFields([])
1618 m=MEDCouplingFieldOverTime([])
1621 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1623 def testBugSemiPartialField(self):
1624 fname="Pyfile46.med"
1625 m=MEDLoaderDataForTest.build2DMesh_3()
1626 m=m[:10] ; m.setName("mesh")
1627 f=m.getMeasureField(False)
1628 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1630 f.setName("SemiPartialField")
1632 f1=f[:6] ; f1.getMesh().setName(m.getName())
1633 f2=f[6:] ; f2.getMesh().setName(m.getName())
1635 mm=MEDFileUMesh.New()
1636 mm.setMeshAtLevel(0,m)
1637 ff=MEDFileField1TS.New()
1638 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1642 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1643 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1644 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1646 fread.checkConsistencyLight()
1647 fread2.checkConsistencyLight()
1648 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1649 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1653 def testUnPolyze1(self):
1654 fname="Pyfile47.med"
1655 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1656 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]
1657 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1658 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]]))
1660 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1661 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1662 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1663 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1664 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1665 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1666 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1667 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1669 mm.setRenumFieldArr(0,None)
1670 mm.setFamilyFieldArr(-1,None)
1674 def testUnPolyze2(self):
1675 fname="Pyfile48.med"
1676 mfd=MEDFileData.New()
1677 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1678 meshes=MEDFileMeshes.New()
1680 mfd.setMeshes(meshes)
1681 fields=MEDFileFields.New()
1682 mfd.setFields(fields)
1683 ff=MEDFileFieldMultiTS.New()
1684 fields.pushField(ff)
1686 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1687 f0_0.setTime(9.5,3,4)
1688 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1690 f0_0.setMesh(mm.getMeshAtLevel(0))
1691 ff.appendFieldNoProfileSBT(f0_0)
1692 ff0=ff.getTimeStepAtPos(0)
1693 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1694 f0_1.setTime(9.5,3,4)
1695 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1696 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1697 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1699 ff0.setFieldProfile(f0_1,mm,0,pfl)
1700 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1701 f0_2.setTime(9.5,3,4)
1702 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1703 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
1704 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1706 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1707 mfd.getFields().shallowCpyGlobs(ff0)
1709 mfd.unPolyzeMeshes()
1711 fmts=mfd.getFields()[0]
1712 self.assertEqual(fmts.getNumberOfTS(),1)
1713 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1714 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1715 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))])
1716 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1717 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1718 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1719 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1720 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1721 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1722 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1723 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))
1724 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1725 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1726 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1727 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1728 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1729 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])
1730 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1731 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1732 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1733 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])
1734 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1740 def testGaussWriteOnPfl1(self):
1741 fname="Pyfile49.med"
1742 fname2="Pyfile50.med"
1743 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1744 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1745 mQ8.allocateCells(1)
1746 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1747 mQ8.finishInsertingCells()
1748 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1749 mQ4.allocateCells(1)
1750 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1751 mQ4.finishInsertingCells()
1752 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1753 mT3.allocateCells(1)
1754 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1755 mT3.finishInsertingCells()
1757 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.]]
1758 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1759 ms[:]=(elt.deepCopy() for elt in ms)
1760 for m,t in zip(ms,tr):
1761 d=m.getCoords() ; d+= t
1763 m=MEDCouplingUMesh.MergeUMeshes(ms)
1765 m2=m[:13] ; m2.setName(m.getName())
1766 ### 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.
1767 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1768 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1771 da=DataArrayDouble(34) ; da.iota(3.)
1773 f.setName("fieldCellOnPflWithoutPfl")
1774 fInvalid=f.deepCopy()
1775 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])
1776 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])
1777 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])
1778 f.checkConsistencyLight()
1779 fInvalid2=fInvalid.deepCopy()
1780 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1783 mm.setMeshAtLevel(0,m)
1786 f1ts=MEDFileField1TS.New()
1787 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1788 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1789 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1790 f1ts.setFieldProfile(f,mm,0,pfl)
1793 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1794 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1795 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1796 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1797 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1798 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1799 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1800 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1802 dataRead=MEDFileData.New(fname)
1803 mRead=dataRead.getMeshes()[0]
1804 f1tsRead=dataRead.getFields()[0][0]
1805 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1806 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1807 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1808 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1809 f2_bis.checkConsistencyLight()
1810 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1812 WriteField(fname2,f,True)
1813 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1814 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1815 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1816 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1817 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1818 m2=m[pfl] ; m2.setName(m.getName())
1821 da=DataArrayDouble(35) ; da.iota(3.)
1823 f.setName("fieldCellOnPflWithoutPfl2")
1824 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1825 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])
1826 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])
1827 f.checkConsistencyLight()
1830 mm.setMeshAtLevel(0,m)
1832 f1ts=MEDFileField1TS.New()
1833 f1ts.setFieldProfile(f,mm,0,pfl)
1834 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1835 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1836 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1837 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1839 dataRead=MEDFileData.New(fname)
1840 mRead=dataRead.getMeshes()[0]
1841 f1tsRead=dataRead.getFields()[0][0]
1842 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1843 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1844 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1845 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1846 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1847 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1848 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1850 WriteField(fname2,f,True)
1851 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1852 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1853 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1854 ## Use case 3 : no pfl but creation of pfls due to gauss pts
1855 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1858 da=DataArrayDouble(60) ; da.iota(3.)
1860 f.setName("fieldCellWithoutPfl")
1861 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])
1862 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])
1863 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])
1864 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])
1865 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])
1866 f.checkConsistencyLight()
1868 mm.setMeshAtLevel(0,m)
1869 f1ts=MEDFileField1TS.New()
1870 f1ts.setFieldNoProfileSBT(f)
1871 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1872 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1873 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1874 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1875 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1879 dataRead=MEDFileData.New(fname)
1880 mRead=dataRead.getMeshes()[0]
1881 f1tsRead=dataRead.getFields()[0][0]
1882 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1883 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1884 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1885 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1886 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1887 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1889 WriteField(fname2,f,True)
1890 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1891 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1892 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1895 # Testing profile on nodes when the profile is identity but not on all nodes.
1897 def testMEDFieldPflOnNode1(self):
1898 fname="Pyfile51.med"
1899 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)
1900 m0=MEDCouplingUMesh("Mesh",2)
1902 m0.insertNextCell(NORM_TRI3,[1,4,2])
1903 m0.insertNextCell(NORM_TRI3,[4,5,2])
1904 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1905 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1906 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1907 m0.finishInsertingCells()
1909 m1=MEDCouplingUMesh(m0.getName(),1)
1911 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1913 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1915 m1.finishInsertingCells()
1919 m.setMeshAtLevel(0,m0)
1920 m.setMeshAtLevel(-1,m1)
1922 dt=3 ; it=2 ; tim=4.5
1923 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1924 fieldNode0.setName("fieldNode0")
1925 fieldNode0.setTime(tim,dt,it)
1926 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1927 arr=DataArrayDouble([10,11,12,13,14])
1928 fieldNode0.setArray(arr)
1929 f0=MEDFileField1TS()
1930 f0.setFieldProfile(fieldNode0,m,0,pfl0)
1931 m.write(fname,2) ; f0.write(fname,0)
1932 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1933 fieldNode1.setName("fieldNode1")
1934 fieldNode1.setTime(tim,dt,it)
1935 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1936 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1937 fieldNode1.setArray(arr1)
1938 f1=MEDFileField1TS()
1939 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1942 ## Reading from file
1943 m=MEDFileMesh.New(fname)
1944 m0=m.getMeshAtLevel(0)
1945 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1946 fieldNode0.setMesh(m00)
1947 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1948 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1949 ff0_1.checkConsistencyLight()
1950 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1951 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1952 ff0_2.checkConsistencyLight()
1953 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1954 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1955 ff0_3.checkConsistencyLight()
1956 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1957 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1958 ff0_4.checkConsistencyLight()
1959 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1960 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1961 m1=m.getMeshAtLevel(-1)
1962 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1963 fieldNode1.setMesh(m10)
1964 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1965 ff1_1.checkConsistencyLight()
1966 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1967 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1968 ff1_2.checkConsistencyLight()
1969 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1970 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1971 ff1_3.checkConsistencyLight()
1972 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1973 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1974 ff1_4.checkConsistencyLight()
1975 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1976 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]
1977 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]
1978 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]
1979 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1980 arr_r.setName(fieldNode1.getArray().getName())
1981 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1982 pfl1_r.setName(pfl1.getName())
1983 self.assertTrue(pfl1_r.isEqual(pfl1))
1986 # Testing profile on nodes when the profile is identity but not on all nodes.
1988 def testMEDFieldPflOnCell1(self):
1989 fname="Pyfile52.med"
1990 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)
1991 m0=MEDCouplingUMesh("Mesh",2)
1993 m0.insertNextCell(NORM_TRI3,[1,4,2])
1994 m0.insertNextCell(NORM_TRI3,[4,5,2])
1995 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1996 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1997 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1998 m0.finishInsertingCells()
2000 m1=MEDCouplingUMesh(m0.getName(),1)
2002 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2004 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2006 m1.finishInsertingCells()
2010 m.setMeshAtLevel(0,m0)
2011 m.setMeshAtLevel(-1,m1)
2013 dt=3 ; it=2 ; tim=4.5
2014 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2015 fieldCell0.setName("fieldCell0")
2016 fieldCell0.setTime(tim,dt,it)
2017 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2018 arr=DataArrayDouble([10,11,12])
2019 fieldCell0.setArray(arr)
2020 f0=MEDFileField1TS()
2021 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2022 m.write(fname,2) ; f0.write(fname,0)
2023 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2024 fieldCell1.setName("fieldCell1")
2025 fieldCell1.setTime(tim,dt,it)
2026 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2027 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2028 fieldCell1.setArray(arr1)
2029 f1=MEDFileField1TS()
2030 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2033 ## Reading from file
2034 m=MEDFileMesh.New(fname)
2035 m0=m.getMeshAtLevel(0)
2036 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2037 fieldCell0.setMesh(m00)
2038 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2039 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2040 ff0_1.checkConsistencyLight()
2041 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2042 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2043 ff0_2.checkConsistencyLight()
2044 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2045 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2046 ff0_3.checkConsistencyLight()
2047 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2048 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2049 ff0_4.checkConsistencyLight()
2050 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2051 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2052 m1=m.getMeshAtLevel(-1)
2053 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2054 fieldCell1.setMesh(m10)
2055 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2056 ff1_1.checkConsistencyLight()
2057 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2058 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2059 ff1_2.checkConsistencyLight()
2060 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2061 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2062 ff1_3.checkConsistencyLight()
2063 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2064 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2065 ff1_4.checkConsistencyLight()
2066 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2067 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]
2068 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]
2069 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]
2070 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2071 arr_r.setName(fieldCell1.getArray().getName())
2072 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2073 pfl1_r.setName(pfl1.getName())
2074 self.assertTrue(pfl1_r.isEqual(pfl1))
2078 def testMEDFileUMeshZipCoords1(self):
2080 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2081 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])
2082 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2083 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2084 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2085 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2086 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2087 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2088 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2089 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2090 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2091 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2093 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2094 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2095 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2096 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2097 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2098 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2099 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2100 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2101 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2105 def testMEDUMeshAddNodeGroup1(self):
2106 fname="Pyfile53.med"
2108 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2109 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])
2110 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2111 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2112 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2113 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2114 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2117 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2118 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2119 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2120 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2121 mm.setFamilyId("MyFam",2)
2122 mm.setFamilyId("MyOtherFam",3)
2123 mm.setFamilyId("MyOther-1",-1)
2124 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2125 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2127 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2129 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2130 mm.addNodeGroup(daTest)
2131 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2132 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
2134 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2135 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2137 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2138 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2139 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2140 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2142 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2143 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2144 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2145 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2146 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2147 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2149 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2150 da=DataArrayInt([3,12]) ; da.setName("grp0")
2151 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2153 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2155 mm=MEDFileMesh.New(fname)
2156 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2157 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2158 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2159 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2161 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2162 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2163 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2164 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2165 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2166 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2168 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2169 da=DataArrayInt([3,12]) ; da.setName("grp0")
2170 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2172 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2176 def testMEDUMeshAddGroup1(self):
2177 fname="Pyfile54.med"
2179 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2180 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2182 m0.insertNextCell(NORM_TRI3,[1,2,1])
2185 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2188 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2190 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2191 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2192 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2193 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2194 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2197 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2198 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2199 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2200 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2201 mm.setFamilyId("MyFam",2)
2202 mm.setFamilyId("MyOtherFam",3)
2203 mm.setFamilyId("MyOther-1",-1)
2204 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2205 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2207 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2208 mm.addGroup(0,daTest)
2209 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2210 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2211 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2212 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2214 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2215 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2216 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2217 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2218 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2219 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2221 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2222 da=DataArrayInt([3,12]) ; da.setName("grp0")
2223 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2225 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2227 mm=MEDFileMesh.New(fname)
2228 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2229 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2230 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2231 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2233 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2234 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2235 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2236 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2237 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2238 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2240 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2241 da=DataArrayInt([3,12]) ; da.setName("grp0")
2242 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2244 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2248 def testHeapMem1(self):
2249 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2251 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2253 m=MEDCouplingCMesh()
2254 arr=DataArrayDouble(10,1) ; arr.iota(0)
2255 m.setCoords(arr,arr)
2256 m=m.buildUnstructured()
2258 f=m.getMeasureField(False)
2259 cooMem = 100 * 2 * 8
2260 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2261 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2262 meshMem = cooMem + nodalMem + indexMem
2263 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2264 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2265 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2268 mm.setMeshAtLevel(0,m)
2269 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2270 ff=MEDFileField1TS()
2271 ff.setFieldNoProfileSBT(f)
2272 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2274 fff=MEDFileFieldMultiTS()
2275 fff.appendFieldNoProfileSBT(f)
2276 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2278 fff.appendFieldNoProfileSBT(f)
2279 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2280 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2283 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2284 fff.appendFieldProfile(f2,mm,0,pfl)
2285 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2286 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2287 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2290 def internalCurveLinearMesh1(self):
2291 fname="Pyfile55.med"
2292 mesh=MEDCouplingCurveLinearMesh();
2293 mesh.setTime(2.3,4,5);
2294 mesh.setTimeUnit("us");
2295 mesh.setName("Example of Cuve linear mesh");
2296 mesh.setDescription("buildCLMesh");
2297 a1=DataArrayDouble(3*20,1);
2298 a1.iota(7.) ; a1.rearrange(3);
2300 mesh.setNodeGridStructure([4,5]);
2301 mesh.checkConsistencyLight();
2303 m=MEDFileCurveLinearMesh()
2305 d=DataArrayInt(20) ; d.iota(4)
2306 m.setFamilyFieldArr(1,d)
2307 d3=DataArrayInt(20) ; d3.iota(400)
2308 m.setRenumFieldArr(1,d3)
2309 d2=DataArrayInt(12) ; d2.iota(40)
2310 m.setFamilyFieldArr(0,d2)
2311 d4=DataArrayInt(21) ; d4.iota(4000)
2312 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2314 m.setRenumFieldArr(1,d4)
2317 m1=MEDFileCurveLinearMesh(fname)
2319 self.assertTrue(mm.isEqual(mesh,1e-12))
2320 self.assertEqual(mm.getSpaceDimension(),3)
2321 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2323 m1=MEDFileMesh.New(fname)
2324 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2325 self.assertTrue(isinstance(m1.getUnivName(),str))
2326 self.assertTrue(len(m1.getUnivName())!=0)
2327 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2331 def testCurveLinearMesh1(self):
2332 self.internalCurveLinearMesh1()
2335 def testParameters1(self):
2336 self.internalParameters1()
2338 def internalParameters1(self):
2339 fname="Pyfile56.med"
2340 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2341 mm=MEDFileCMesh() ; mm.setMesh(m)
2342 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2344 p=MEDFileParameters()
2345 data.setParams(p) ; data.setMeshes(ms)
2346 pts=MEDFileParameterMultiTS()
2347 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2348 pts.appendValue(1,2,3.4,567.89)
2349 pts.appendValue(2,3,5.6,999.123)
2350 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2351 p.pushParam(pts) ; p.pushParam(pts2)
2353 p2=MEDFileParameters(fname)
2354 self.assertTrue(p.isEqual(p2,1e-14)[0])
2355 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2357 pts4=pts2.deepCopy()
2358 pts3=pts2.deepCopy()
2359 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2360 pts2.eraseTimeStepIds([0])
2361 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2363 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2364 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2365 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2366 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2367 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2369 self.assertTrue(p.isEqual(p2,1e-14)[0])
2370 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2371 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2372 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2373 self.assertEqual(p.getParamsNames(),('A','B'))
2374 ptsr=MEDFileParameterMultiTS(fname,"B")
2375 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2376 ptsr=MEDFileParameterMultiTS(fname)
2377 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2378 p1tsr=MEDFileParameterDouble1TS(fname)
2379 self.assertEqual(p1tsr.getName(),"A")
2380 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2381 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2382 self.assertEqual(p1tsr.getName(),"B")
2383 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2384 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2385 self.assertEqual(p1tsr.getName(),"B")
2386 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2387 data2=MEDFileData(fname)
2388 self.assertEqual(2,data2.getNumberOfParams())
2389 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2393 def testNamesOnCellAndNodesInMeshes1(self):
2394 fname="Pyfile58.med"
2395 fname2="Pyfile59.med"
2396 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2397 m1=m.buildDescendingConnectivity()[0]
2398 m1.sortCellsInMEDFileFrmt()
2401 mm.setMeshAtLevel(0,m)
2402 mm.setMeshAtLevel(-1,m1)
2403 namesCellL0=DataArrayAsciiChar(6,16)
2404 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2405 mm.setNameFieldAtLevel(0,namesCellL0)
2406 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2407 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2408 mm.setNameFieldAtLevel(-1,namesCellL1)
2409 namesNodes=namesCellL1.subArray(4,16)
2410 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2411 mm.setNameFieldAtLevel(1,namesNodes)
2414 mmr=MEDFileMesh.New(fname)
2415 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2416 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2417 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2418 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2419 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2420 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2421 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2422 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2424 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2425 # remove names on nodes
2426 mmCpy.setNameFieldAtLevel(1,None)
2427 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2428 mm.setNameFieldAtLevel(1,None)
2429 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2430 mm.setNameFieldAtLevel(-1,None)
2432 mmr=MEDFileMesh.New(fname)
2433 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2434 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2435 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2437 c=MEDCouplingCMesh()
2438 arr=DataArrayDouble([0.,1.1,2.3])
2439 c.setCoords(arr,arr)
2443 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2444 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2446 ccr=MEDFileMesh.New(fname2)
2447 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2448 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2449 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2450 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2451 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2452 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2453 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2455 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2459 def testToExportInExamples1(self):
2460 m=MEDCouplingCMesh()
2461 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2462 m.setCoords(arr,arr)
2463 m=m.buildUnstructured() ; m.setName("mesh")
2464 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2465 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2468 mm.setMeshAtLevel(0,m)
2469 mm.setMeshAtLevel(-1,m2)
2470 mm.setGroupsAtLevel(0,[grp1,grp2])
2471 mm.write("example.med",2)
2473 m0=mm.getMeshAtLevel(0)
2474 m1=mm.getMeshAtLevel(-1)
2475 grp1=mm.getGroupArr(0,"grp1")
2476 grp2=mm.getGroupArr(0,"grp2")
2478 whichGrp=DataArrayInt(m0.getNumberOfCells())
2479 whichGrp.fillWithValue(-1)
2480 for grpId,grp in enumerate(grps):
2483 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2484 e,f=a.areCellsIncludedIn(m1,2)
2486 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2487 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2488 c2.transformWithIndArr(whichGrp)
2489 splitOfM1=len(grps)*[None]
2490 for grpId,grp in enumerate(grps):
2491 tmp=c2.findIdsEqual(grpId)
2492 splitOfM1[grpId]=tmp
2494 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2495 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2499 def testBugCorrection1(self):
2502 self.assertEqual(fs[0],None)
2503 self.assertEqual(3,len(fs))
2507 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2508 f1Name="Pyfile60.med"
2509 f2Name="Pyfile61.med"
2510 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2512 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2514 # reading and compare
2515 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2516 for mn in d1.getMeshes().getMeshesNames():
2517 m1=d1.getMeshes()[mn]
2518 m2=d2.getMeshes()[mn]
2519 for lev in m1.getNonEmptyLevels():
2520 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2521 for grpName in grpsNames:
2522 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2526 for fieldn in d1.getFields().getFieldsNames():
2527 f1=d1.getFields()[fieldn]
2528 f2=d2.getFields()[fieldn]
2529 for it,order,tim in f1.getTimeSteps():
2532 if len(f1t.getPflsReallyUsed())!=0:
2534 for lev in f1t.getNonEmptyLevels()[1]:
2535 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2536 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2537 self.assertTrue(pfl1.isEqual(pfl2))
2538 self.assertTrue(arr1.isEqual(arr2,1e-10))
2543 for lev in f1t.getNonEmptyLevels()[1]:
2544 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2545 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2546 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2554 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2555 m=MEDCouplingCMesh()
2556 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2557 m.setCoords(arr,arr,arr)
2558 m=m.buildUnstructured()
2559 m2=m.buildDescendingConnectivity()[0]
2561 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2562 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2563 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2564 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2565 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2566 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2568 mm.setMeshAtLevel(0,m)
2569 mm.setGroupsAtLevel(0,[g1,g2])
2570 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2571 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2572 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2573 mm.normalizeFamIdsMEDFile()
2574 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2575 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2576 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2577 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2578 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2579 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2580 for g in mm.getGroupsOnSpecifiedLev(0):
2581 for f in mm.getFamiliesIdsOnGroup(g):
2582 self.assertTrue(f<0)
2587 mm.setMeshAtLevel(0,m)
2588 mm.setMeshAtLevel(-1,m2)
2589 mm.setGroupsAtLevel(0,[g1,g2])
2590 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2591 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2592 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2593 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2594 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2595 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2596 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2597 mm.normalizeFamIdsMEDFile()
2598 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2599 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2600 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2601 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2602 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2603 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2604 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2605 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2606 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2607 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2608 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2609 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2611 for g in mm.getGroupsOnSpecifiedLev(lev):
2612 for f in mm.getFamiliesIdsOnGroup(g):
2613 self.assertTrue(f<0)
2619 mm.setMeshAtLevel(0,m)
2620 mm.setMeshAtLevel(-1,m2)
2621 mm.setGroupsAtLevel(0,[g1,g2])
2622 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2623 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2624 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2625 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2626 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2627 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2628 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2629 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2630 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2631 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2632 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2633 mm.normalizeFamIdsMEDFile()
2634 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2635 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2636 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2637 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2638 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2639 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2640 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2641 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2642 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2643 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2644 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2645 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2646 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2647 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2648 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2649 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2650 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2651 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2653 for g in mm.getGroupsOnSpecifiedLev(lev):
2654 for f in mm.getFamiliesIdsOnGroup(g):
2655 self.assertTrue(f<0)
2659 for g in mm.getGroupsOnSpecifiedLev(1):
2660 for f in mm.getFamiliesIdsOnGroup(g):
2661 self.assertTrue(f>0)
2667 def testNonRegressionMantis22212ChangeGrpName(self):
2668 fileName="Pyfile62.med"
2669 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2670 m=MEDFileUMesh.New()
2671 m.setCoords(m2.getCoords())
2672 m.setMeshAtLevel(0,m2)
2673 m.setMeshAtLevel(-1,m1)
2674 m.setMeshAtLevel(-2,m0)
2675 m.setFamilyFieldArr(0,f2)
2676 m.setFamilyFieldArr(-1,f1)
2677 m.setFamilyFieldArr(-2,f0)
2678 m.setFamilyFieldArr(1,p)
2680 for i in range(nbOfFams):
2681 m.addFamily(fns[i],fids[i])
2684 for i in range(nbOfGrps):
2685 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2687 m.setName(m2.getName())
2688 m.setDescription(m2.getDescription())
2691 mm0=MEDFileMesh.New(fileName)
2692 mm1=MEDFileMesh.New(fileName)
2693 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2694 for name in groupNamesIni:
2695 mm1.changeGroupName(name,name+'N')
2697 mm1.write(fileName,2)
2700 mm2=MEDFileMesh.New(fileName)
2701 for name in groupNamesIni:
2702 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2703 arr0=mm0.getGroupArr(lev,name)
2704 arr2=mm2.getGroupArr(lev,name+'N')
2705 arr0.setName(name+'N')
2706 self.assertTrue(arr0.isEqual(arr2))
2712 def testInt32InMEDFileFieldStar1(self):
2713 self.internalInt32InMEDFileFieldStar1()
2715 def internalInt32InMEDFileFieldStar1(self):
2716 fname="Pyfile63.med"
2717 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2718 f1=f1.convertToIntField()
2720 mm1=MEDFileUMesh.New()
2721 mm1.setCoords(m1.getCoords())
2722 mm1.setMeshAtLevel(0,m1)
2723 mm1.setName(m1.getName())
2725 ff1=MEDFileIntField1TS()
2726 ff1.setFieldNoProfileSBT(f1)
2727 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2728 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2729 self.assertTrue(a.isEqual(f1,1e-12,0))
2731 a,b=ff1.getUndergroundDataArrayExt()
2732 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2733 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2734 ff2=MEDFileAnyTypeField1TS.New(fname)
2735 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2736 self.assertEqual(ff2.getTime(),[0,1,2.0])
2737 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2738 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2739 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2740 self.assertTrue(a.isEqual(f1,1e-12,0))
2742 c=ff2.getUndergroundDataArray() ; c*=2
2743 ff2.write(fname,0) # 2 time steps in
2744 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2745 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2746 self.assertEqual(len(ffs1),2)
2747 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2748 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2749 self.assertTrue(a.isEqual(f1,1e-12,0))
2750 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2751 self.assertTrue(a.isEqual(f1,1e-12,0))
2752 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2753 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2754 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2755 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2756 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2757 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2759 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2762 self.assertTrue(bc.isEqual(3*f1.getArray()))
2763 nf1=MEDCouplingFieldInt(ON_NODES)
2764 nf1.setTime(9.,10,-1)
2765 nf1.setMesh(f1.getMesh())
2766 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2767 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2768 nff1=MEDFileIntField1TS.New()
2769 nff1.setFieldNoProfileSBT(nf1)
2770 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2771 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2774 nf2=MEDCouplingFieldInt(ON_NODES)
2775 nf2.setTime(19.,20,-11)
2776 nf2.setMesh(f1.getMesh())
2777 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2778 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2779 nff2=MEDFileIntField1TS.New()
2780 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2781 nff2.setFieldProfile(nf2,mm1,0,npfl)
2782 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2783 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2784 self.assertTrue(b.isEqual(npfl))
2785 self.assertTrue(a.isEqual(narr2))
2787 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2788 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2789 self.assertTrue(b.isEqual(npfl))
2790 self.assertTrue(a.isEqual(narr2))
2792 nf3=MEDCouplingFieldDouble(ON_NODES)
2793 nf3.setName("VectorFieldOnNodesDouble")
2794 nf3.setTime(29.,30,-21)
2795 nf3.setMesh(f1.getMesh())
2796 nf3.setArray(f1.getMesh().getCoords())
2797 nff3=MEDFileField1TS.New()
2798 nff3.setFieldNoProfileSBT(nf3)
2800 fs=MEDFileFields(fname)
2801 self.assertEqual(len(fs),4)
2802 ffs=[it for it in fs]
2803 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2804 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2805 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2806 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2808 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2809 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2810 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2811 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2812 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2814 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2815 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2816 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2817 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2818 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2819 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2820 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2821 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2823 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2824 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2825 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2826 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2830 def testMEDFileFields1(self):
2831 fname="Pyfile64.med"
2832 f1=MEDCouplingFieldDouble(ON_NODES)
2833 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2834 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2835 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2837 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2839 f1.setName("Field1")
2840 ff1=MEDFileField1TS.New()
2841 ff1.setFieldNoProfileSBT(f1)
2842 self.assertEqual(ff1.getDtUnit(),"us")
2844 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2845 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2847 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2848 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2849 ff1s.setName("Field2")
2851 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2852 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2853 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2854 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2855 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2856 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2857 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2858 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2861 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2863 def testMEDFileFields2(self):
2864 fname="Pyfile65.med"
2865 # to check that all is initialize
2866 MEDFileField1TS().__str__()
2867 MEDFileFieldMultiTS().__str__()
2868 # building a mesh containing 4 tri3 + 5 quad4
2869 tri=MEDCouplingUMesh("tri",2)
2870 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2871 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2872 tris = [tri.deepCopy() for i in range(4)]
2873 for i,elt in enumerate(tris): elt.translate([i,0])
2874 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2875 quad=MEDCouplingUMesh("quad",2)
2876 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2877 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2878 quads = [quad.deepCopy() for i in range(5)]
2879 for i,elt in enumerate(quads): elt.translate([5+i,0])
2880 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2881 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2882 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2884 fmts0_0=MEDFileFieldMultiTS()
2885 fmts0_1=MEDFileFieldMultiTS()
2888 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2889 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2890 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2891 f.setTime(float(i+1)+0.1,i+1,-i-1)
2892 fmts0_0.appendFieldNoProfileSBT(f)
2893 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2894 self.assertEqual(fmts0_1.getName(),name1)
2895 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2896 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2898 # components names have been modified to generate errors
2899 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2900 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2901 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2902 f1ts.setInfo(['aa [bb]','eee [dd]'])
2903 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2905 # add a mismatch of nb of compos
2907 fmts0_2=fmts0_0.deepCopy()
2908 fmts0_3=fmts0_0.deepCopy()
2909 fmts0_4=fmts0_0.deepCopy()
2910 fmts0_5=fmts0_0.shallowCpy()
2911 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)
2913 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2914 del fmts0_3[[1.1,(6,-6),9]]
2915 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2916 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2917 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2918 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2919 fmts0_7=fmts0_4[::-3]
2920 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2921 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2924 fs0.pushField(fmts0_0)
2925 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2926 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2927 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2928 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2930 fs0=MEDFileFields(fname)
2931 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2932 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2933 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2934 del fs1[["2ndField",3]]
2935 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2936 fs2=fs0[[0,"4thField"]]
2937 self.assertTrue(isinstance(fs2,MEDFileFields))
2938 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2940 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2943 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2945 def testMEDFileFields3(self):
2946 fname="Pyfile66.med"
2947 # building a mesh containing 4 tri3 + 5 quad4
2948 tri=MEDCouplingUMesh("tri",2)
2949 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2950 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2951 tris = [tri.deepCopy() for i in range(4)]
2952 for i,elt in enumerate(tris): elt.translate([i,0])
2953 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2954 quad=MEDCouplingUMesh("quad",2)
2955 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2956 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2957 quads = [quad.deepCopy() for i in range(5)]
2958 for i,elt in enumerate(quads): elt.translate([5+i,0])
2959 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2960 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2961 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2963 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2965 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2966 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2967 fmts0_0=MEDFileFieldMultiTS()
2968 fmts0_1=MEDFileFieldMultiTS()
2971 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2972 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2973 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2974 f.setTime(float(i+1)+0.1,i+1,-i-1)
2975 fmts0_0.appendFieldProfile(f,mm,0,pfl)
2976 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2977 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2978 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2981 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2982 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2983 fmts0_0.zipPflsNames()
2984 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2985 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2986 fmts0_2=fmts0_0.deepCopy()
2987 fmts0_3=fmts0_0.deepCopy()
2988 fmts0_4=fmts0_0.deepCopy()
2990 fs0.pushField(fmts0_0)
2991 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2992 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2993 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2994 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2996 fmts0_5=MEDFileFieldMultiTS()
2998 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2999 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3000 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3001 f.setTime(float(i+1)+0.1,i+1,-i-1)
3002 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3004 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3005 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3006 fs0.checkGlobsCoherency()
3011 def testSplitComponents1(self):
3012 fname="Pyfile67.med"
3013 # building a mesh containing 4 tri3 + 5 quad4
3014 tri=MEDCouplingUMesh("tri",2)
3015 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3016 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3017 tris = [tri.deepCopy() for i in range(4)]
3018 for i,elt in enumerate(tris): elt.translate([i,0])
3019 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3020 quad=MEDCouplingUMesh("quad",2)
3021 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3022 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3023 quads = [quad.deepCopy() for i in range(5)]
3024 for i,elt in enumerate(quads): elt.translate([5+i,0])
3025 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3026 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3027 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3029 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3031 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3032 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3034 fmts0_1=MEDFileFieldMultiTS()
3036 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3039 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3040 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3041 f.setTime(float(i+1)+0.1,i+1,-i-1)
3042 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3043 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3045 fs.pushField(fmts0_1)
3046 self.assertEqual(1,len(fs))
3047 l=fmts0_1.splitComponents()
3048 self.assertEqual(3,len(l))
3049 for elt in l: self.assertEqual(10,len(elt))
3050 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3052 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3055 self.assertEqual(4,len(fs))
3056 for elt in fs: self.assertEqual(10,len(elt))
3057 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3058 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3060 fs.write(fname,0) ; del fs
3062 fs1=MEDFileFields(fname)
3063 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3064 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3065 self.assertEqual(4,len(fs1))
3067 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3068 f1ts=fs1[fieldName][i]
3069 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3070 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3071 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3073 f1ts=fs1["1stField"][i]
3074 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3075 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3076 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3081 def testMEDFileFieldConvertTo1(self):
3082 fname="Pyfile68.med"
3083 # building a mesh containing 4 tri3 + 5 quad4
3084 tri=MEDCouplingUMesh("tri",2)
3085 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3086 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3087 tris = [tri.deepCopy() for i in range(4)]
3088 for i,elt in enumerate(tris): elt.translate([i,0])
3089 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3090 quad=MEDCouplingUMesh("quad",2)
3091 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3092 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3093 quads = [quad.deepCopy() for i in range(5)]
3094 for i,elt in enumerate(quads): elt.translate([5+i,0])
3095 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3096 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3097 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3098 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3100 ff0=MEDFileField1TS()
3101 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")
3102 f0.checkConsistencyLight()
3103 ff0.setFieldNoProfileSBT(f0)
3105 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3106 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3108 ff0i=ff0.convertToInt()
3109 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3110 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3112 ff1=ff0i.convertToDouble()
3113 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3114 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3116 del arr,f0,ff0,ff1,ff0i,fspExp
3117 ff0=MEDFileField1TS()
3118 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")
3119 f0.checkConsistencyLight()
3120 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3121 ff0.setFieldProfile(f0,mm,0,pfl)
3122 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3123 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3125 ff0i=ff0.convertToInt()
3126 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3127 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3128 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3130 ff1=ff0i.convertToDouble()
3131 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3132 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3133 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3135 ff0=MEDFileFieldMultiTS()
3136 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)
3137 f0.checkConsistencyLight()
3138 ff0.appendFieldProfile(f0,mm,0,pfl)
3139 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)
3140 f0.checkConsistencyLight()
3141 ff0.appendFieldProfile(f0,mm,0,pfl)
3142 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)
3143 f0.checkConsistencyLight()
3144 ff0.appendFieldProfile(f0,mm,0,pfl)
3145 ff1=ff0.convertToInt()
3146 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3147 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3148 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3149 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3150 arr=ff1.getUndergroundDataArray(dt,it)
3151 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3153 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3158 ff1=ff1.convertToDouble()
3159 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3160 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3161 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3162 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3163 arr=ff1.getUndergroundDataArray(dt,it)
3164 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3166 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3168 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3169 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3170 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3171 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3172 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3173 arr=ff1.getUndergroundDataArray(dt,it)
3174 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3176 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3180 def testMEDFileFieldPartialLoading(self):
3181 fname="Pyfile69.med"
3183 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3185 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3186 # building a mesh containing 30 tri3 + 40 quad4
3187 tri=MEDCouplingUMesh("tri",2)
3188 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3189 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3190 tris = [tri.deepCopy() for i in range(30)]
3191 for i,elt in enumerate(tris): elt.translate([i,0])
3192 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3193 quad=MEDCouplingUMesh("quad",2)
3194 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3195 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3196 quads = [quad.deepCopy() for i in range(40)]
3197 for i,elt in enumerate(quads): elt.translate([40+i,0])
3198 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3199 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3200 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3201 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3203 ff0=MEDFileField1TS()
3204 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")
3205 f0.checkConsistencyLight()
3206 ff0.setFieldNoProfileSBT(f0)
3209 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3210 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3212 ff0=MEDFileField1TS()
3213 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")
3214 f0.checkConsistencyLight()
3215 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3216 ff0.setFieldProfile(f0,mm,0,pfl)
3217 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3218 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3221 ff0=MEDFileField1TS(fname,False)
3222 self.assertEqual(ff0.getName(),"FieldCell")
3223 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3224 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3225 heap_memory_ref=ff0.getHeapMemorySize()
3226 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3228 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3229 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3230 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3232 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3233 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3234 heap_memory_ref=ff0.getHeapMemorySize()
3235 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3237 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3238 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3239 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3241 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3242 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3243 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3244 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3246 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3247 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3248 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3249 ff0.loadArraysIfNecessary() ##
3250 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3251 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3252 heap_memory_ref=ff0.getHeapMemorySize()
3253 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3255 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3256 self.assertEqual(hmd,-800) # -50*8*2
3258 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3260 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3261 heap_memory_ref=ff0.getHeapMemorySize()
3262 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3264 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3265 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3267 fieldName="FieldCellMultiTS"
3268 ff0=MEDFileFieldMultiTS()
3270 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)
3271 f0.setTime(float(t)+0.1,t,100+t)
3272 f0.checkConsistencyLight()
3273 ff0.appendFieldNoProfileSBT(f0)
3277 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3278 heap_memory_ref=ff0.getHeapMemorySize()
3279 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3281 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3284 ffs=MEDFileFields(fname,False)
3285 heap_memory_ref=ffs.getHeapMemorySize()
3286 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3288 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3292 def testMEDFileMeshReadSelector1(self):
3293 mrs=MEDFileMeshReadSelector()
3294 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3295 mrs.__str__() ; mrs.__repr__()
3297 mrs=MEDFileMeshReadSelector(0)
3298 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())
3299 mrs=MEDFileMeshReadSelector(1)
3300 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3301 mrs=MEDFileMeshReadSelector(2)
3302 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3303 mrs=MEDFileMeshReadSelector(3)
3304 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3305 mrs=MEDFileMeshReadSelector(4)
3306 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3307 mrs=MEDFileMeshReadSelector(5)
3308 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3309 mrs=MEDFileMeshReadSelector(6)
3310 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3311 mrs=MEDFileMeshReadSelector(7)
3312 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3313 mrs=MEDFileMeshReadSelector(8)
3314 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3315 mrs=MEDFileMeshReadSelector(9)
3316 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3317 mrs=MEDFileMeshReadSelector(10)
3318 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3319 mrs=MEDFileMeshReadSelector(11)
3320 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3321 mrs=MEDFileMeshReadSelector(12)
3322 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3323 mrs=MEDFileMeshReadSelector(13)
3324 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3325 mrs=MEDFileMeshReadSelector(14)
3326 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3327 mrs=MEDFileMeshReadSelector(15)
3328 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3329 mrs=MEDFileMeshReadSelector(16)
3330 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3331 mrs=MEDFileMeshReadSelector(17)
3332 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3333 mrs=MEDFileMeshReadSelector(18)
3334 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3335 mrs=MEDFileMeshReadSelector(19)
3336 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3337 mrs=MEDFileMeshReadSelector(20)
3338 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3339 mrs=MEDFileMeshReadSelector(21)
3340 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3341 mrs=MEDFileMeshReadSelector(22)
3342 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3343 mrs=MEDFileMeshReadSelector(23)
3344 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3345 mrs=MEDFileMeshReadSelector(24)
3346 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3347 mrs=MEDFileMeshReadSelector(25)
3348 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3349 mrs=MEDFileMeshReadSelector(26)
3350 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3351 mrs=MEDFileMeshReadSelector(27)
3352 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3353 mrs=MEDFileMeshReadSelector(28)
3354 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3355 mrs=MEDFileMeshReadSelector(29)
3356 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3357 mrs=MEDFileMeshReadSelector(30)
3358 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3359 mrs=MEDFileMeshReadSelector(31)
3360 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3361 mrs=MEDFileMeshReadSelector(32)
3362 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3363 mrs=MEDFileMeshReadSelector(33)
3364 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3365 mrs=MEDFileMeshReadSelector(34)
3366 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3367 mrs=MEDFileMeshReadSelector(35)
3368 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3369 mrs=MEDFileMeshReadSelector(36)
3370 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3371 mrs=MEDFileMeshReadSelector(37)
3372 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3373 mrs=MEDFileMeshReadSelector(38)
3374 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3375 mrs=MEDFileMeshReadSelector(39)
3376 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3377 mrs=MEDFileMeshReadSelector(40)
3378 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3379 mrs=MEDFileMeshReadSelector(41)
3380 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3381 mrs=MEDFileMeshReadSelector(42)
3382 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3383 mrs=MEDFileMeshReadSelector(43)
3384 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3385 mrs=MEDFileMeshReadSelector(44)
3386 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3387 mrs=MEDFileMeshReadSelector(45)
3388 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3389 mrs=MEDFileMeshReadSelector(46)
3390 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3391 mrs=MEDFileMeshReadSelector(47)
3392 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3393 mrs=MEDFileMeshReadSelector(48)
3394 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3395 mrs=MEDFileMeshReadSelector(49)
3396 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3397 mrs=MEDFileMeshReadSelector(50)
3398 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3399 mrs=MEDFileMeshReadSelector(51)
3400 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3401 mrs=MEDFileMeshReadSelector(52)
3402 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3403 mrs=MEDFileMeshReadSelector(53)
3404 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3405 mrs=MEDFileMeshReadSelector(54)
3406 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3407 mrs=MEDFileMeshReadSelector(55)
3408 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3409 mrs=MEDFileMeshReadSelector(56)
3410 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3411 mrs=MEDFileMeshReadSelector(57)
3412 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3413 mrs=MEDFileMeshReadSelector(58)
3414 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3415 mrs=MEDFileMeshReadSelector(59)
3416 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3417 mrs=MEDFileMeshReadSelector(60)
3418 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3419 mrs=MEDFileMeshReadSelector(61)
3420 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3421 mrs=MEDFileMeshReadSelector(62)
3422 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3423 mrs=MEDFileMeshReadSelector(63)
3424 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3426 mrs=MEDFileMeshReadSelector(63)
3427 mrs.setCellFamilyFieldReading(False)
3428 self.assertEqual(mrs.getCode(),62)
3429 mrs.setCellFamilyFieldReading(True)
3430 self.assertEqual(mrs.getCode(),63)
3431 mrs.setNodeFamilyFieldReading(False)
3432 self.assertEqual(mrs.getCode(),61)
3433 mrs.setNodeFamilyFieldReading(True)
3434 self.assertEqual(mrs.getCode(),63)
3435 mrs.setCellNameFieldReading(False)
3436 self.assertEqual(mrs.getCode(),59)
3437 mrs.setCellNameFieldReading(True)
3438 self.assertEqual(mrs.getCode(),63)
3439 mrs.setNodeNameFieldReading(False)
3440 self.assertEqual(mrs.getCode(),55)
3441 mrs.setNodeNameFieldReading(True)
3442 self.assertEqual(mrs.getCode(),63)
3443 mrs.setCellNumFieldReading(False)
3444 self.assertEqual(mrs.getCode(),47)
3445 mrs.setCellNumFieldReading(True)
3446 self.assertEqual(mrs.getCode(),63)
3447 mrs.setNodeNumFieldReading(False)
3448 self.assertEqual(mrs.getCode(),31)
3449 mrs.setNodeNumFieldReading(True)
3450 self.assertEqual(mrs.getCode(),63)
3454 def testPartialReadOfMeshes(self):
3455 fname="Pyfile70.med"
3456 # building a mesh containing 4 tri3 + 5 quad4
3457 tri=MEDCouplingUMesh("tri",2)
3458 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3459 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3460 tris = [tri.deepCopy() for i in range(4)]
3461 for i,elt in enumerate(tris): elt.translate([i,0])
3462 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3463 quad=MEDCouplingUMesh("quad",2)
3464 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3465 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3466 quads = [quad.deepCopy() for i in range(5)]
3467 for i,elt in enumerate(quads): elt.translate([5+i,0])
3468 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3469 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3470 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3471 m1=m.buildDescendingConnectivity()[0]
3472 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3474 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3475 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3476 mm.setGroupsAtLevel(0,[grp0,grp1])
3477 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3478 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3479 mm.setGroupsAtLevel(-1,[grp2,grp3])
3480 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3481 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3482 mm.setGroupsAtLevel(1,[grp4,grp5])
3483 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3484 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3485 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3489 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3490 b4_ref_heap_mem=mm.getHeapMemorySize()
3491 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3492 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3493 ref_heap_mem=mm.getHeapMemorySize()
3494 # check the gain of memory using 1GTUMesh instead of UMesh
3495 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
3497 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3498 self.assertEqual(len(mm.getGroupsNames()),0)
3499 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3500 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3501 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3502 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3503 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3504 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3505 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3506 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3507 delta1=ref_heap_mem-mm.getHeapMemorySize()
3508 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3510 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3511 self.assertEqual(len(mm.getGroupsNames()),6)
3512 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3513 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3514 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3515 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3516 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3517 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3518 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3519 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3520 delta2=ref_heap_mem-mm.getHeapMemorySize()
3521 self.assertTrue(delta2<delta1)
3522 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3524 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3525 self.assertEqual(len(mm.getGroupsNames()),6)
3526 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3527 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3528 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3529 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3530 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3531 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3532 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3533 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3534 delta3=ref_heap_mem-mm.getHeapMemorySize()
3535 self.assertTrue(delta3<delta2)
3536 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3538 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3539 self.assertEqual(len(mm.getGroupsNames()),6)
3540 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3541 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3542 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3543 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3544 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3545 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3546 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3547 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3548 delta4=ref_heap_mem-mm.getHeapMemorySize()
3549 self.assertTrue(delta4<delta3)
3550 self.assertTrue(delta4>=32*4*2)
3552 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3553 self.assertEqual(len(mm.getGroupsNames()),6)
3554 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3555 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3556 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3557 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3558 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3559 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3560 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3561 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3562 delta5=ref_heap_mem-mm.getHeapMemorySize()
3563 self.assertTrue(delta5<delta4)
3564 self.assertEqual(delta5,0)
3567 # this test checks that setFieldProfile perform a check of the array length
3568 # compared to the profile length. This test also checks that mesh attribute of field
3569 # is not used by setFieldProfile (because across this test mesh is equal to None)
3571 def testCheckCompatibilityPfl1(self):
3572 # building a mesh containing 4 tri3 + 5 quad4
3573 tri=MEDCouplingUMesh("tri",2)
3574 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3575 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3576 tris = [tri.deepCopy() for i in range(4)]
3577 for i,elt in enumerate(tris): elt.translate([i,0])
3578 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3579 quad=MEDCouplingUMesh("quad",2)
3580 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3581 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3582 quads = [quad.deepCopy() for i in range(5)]
3583 for i,elt in enumerate(quads): elt.translate([5+i,0])
3584 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3585 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3586 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3587 m1=m.buildDescendingConnectivity()[0]
3588 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3590 f1ts=MEDFileField1TS()
3591 f=MEDCouplingFieldDouble(ON_NODES)
3592 vals=DataArrayDouble(7) ; vals.iota(1000)
3594 f.setName("anonymous") # f has no mesh it is not a bug
3595 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3596 f1ts.setFieldProfile(f,mm,0,pfl)
3598 f1ts=MEDFileField1TS()
3599 f=MEDCouplingFieldDouble(ON_NODES)
3600 vals=DataArrayDouble(8) ; vals.iota(1000)
3602 f.setName("anonymous") # f has no mesh it is not a bug
3603 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3604 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3606 f1ts=MEDFileField1TS()
3607 f=MEDCouplingFieldDouble(ON_CELLS)
3608 vals=DataArrayDouble(7) ; vals.iota(1000)
3610 f.setName("anonymous") # f has no mesh it is not a bug
3611 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3612 f1ts.setFieldProfile(f,mm,0,pfl)
3613 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3615 f1ts=MEDFileField1TS()
3616 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3617 vals=DataArrayDouble(27) ; vals.iota(1000)
3619 f.setName("anonymous") # f has no mesh it is not a bug
3620 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3622 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])
3623 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3624 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])
3626 f1ts.setFieldProfile(f,mm,0,pfl)
3627 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3628 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3629 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3630 vals=DataArrayDouble(27) ; vals.iota(1000)
3631 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3633 f1ts=MEDFileField1TS()
3634 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3635 vals=DataArrayDouble(25) ; vals.iota(1000)
3637 f.setName("anonymous") # f has no mesh it is not a bug
3638 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3639 f1ts.setFieldProfile(f,mm,0,pfl)
3640 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3641 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3643 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3644 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3646 f1ts=MEDFileField1TS()
3647 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3648 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3650 f1ts.setFieldProfile(f,mm,0,pfl)
3654 def testWRMeshWithNoCells(self):
3655 fname="Pyfile71.med"
3656 a=DataArrayDouble(4) ; a.iota()
3657 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3658 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3660 m.setMeshAtLevel(0,m00)
3661 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3662 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3666 m=MEDFileMesh.New(fname)
3667 self.assertEqual((),m.getNonEmptyLevels())
3668 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))
3669 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3670 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3674 def testWRQPolyg1(self):
3675 fname="Pyfile72.med"
3676 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3677 m.insertNextCell([0,2,1,3])
3678 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3680 ms = [m.deepCopy() for i in range(4)]
3681 for i,elt in enumerate(ms):
3682 elt.translate([float(i)*1.5,0.])
3684 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3685 m0.convertAllToPoly()
3687 ms = [m.deepCopy() for i in range(5)]
3688 for i,elt in enumerate(ms):
3689 elt.translate([float(i)*1.5,1.5])
3691 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3692 m1.convertAllToPoly()
3693 m1.convertLinearCellsToQuadratic()
3695 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3698 mm.setMeshAtLevel(0,m)
3699 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3700 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3701 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3702 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3707 mm_read=MEDFileUMesh(fname)
3708 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3709 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3710 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3711 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3713 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3715 arr0=DataArrayDouble(9) ; arr0.iota()
3716 arr1=DataArrayDouble(9) ; arr1.iota(100)
3717 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3718 f.setArray(arr) ; f.checkConsistencyLight()
3720 ff=MEDFileField1TS()
3721 ff.setFieldNoProfileSBT(f)
3724 ff_read=MEDFileField1TS(fname)
3725 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3726 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3730 def testLoadIfNecessaryOnFromScratchFields0(self):
3732 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3734 fname="Pyfile77.med"
3735 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3736 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3738 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3739 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3740 m.finishInsertingCells()
3742 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3743 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3747 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3748 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3750 f0.setName("myELNOField")
3751 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3752 f0.setArray(arrs[0])
3753 ff0.appendFieldNoProfileSBT(f0)
3756 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3757 f0.setArray(arrs[1])
3758 ff0.appendFieldNoProfileSBT(f0)
3761 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3762 f0.setArray(arrs[2])
3763 ff0.appendFieldNoProfileSBT(f0)
3766 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3767 f0.setArray(arrs[3])
3768 ff0.appendFieldNoProfileSBT(f0)
3770 for i,arr in enumerate(arrs):
3771 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3772 fs[0][i].loadArraysIfNecessary()
3773 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3775 fs.loadArraysIfNecessary()
3776 for i,arr in enumerate(arrs):
3777 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3779 fs[0].loadArraysIfNecessary()
3780 for i,arr in enumerate(arrs):
3781 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3786 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3787 """ 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.
3789 fname="Pyfile78.med"
3790 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)
3791 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3792 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3794 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
3795 m0.insertNextCell(NORM_TETRA4,elt)
3797 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
3798 m0.insertNextCell(NORM_PYRA5,elt)
3800 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
3801 m0.insertNextCell(NORM_PENTA6,elt)
3803 m0.checkConsistency()
3804 m1=MEDCouplingUMesh(); m1.setName("mesh")
3805 m1.setMeshDimension(2);
3806 m1.allocateCells(5);
3807 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3808 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3809 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3810 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3811 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3812 m1.setCoords(coords);
3813 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3815 m3.insertNextCell(NORM_POINT1,[2])
3816 m3.insertNextCell(NORM_POINT1,[3])
3817 m3.insertNextCell(NORM_POINT1,[4])
3818 m3.insertNextCell(NORM_POINT1,[5])
3821 mm.setMeshAtLevel(0,m0)
3822 mm.setMeshAtLevel(-1,m1)
3823 mm.setMeshAtLevel(-3,m3)
3825 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3826 mm=MEDFileMesh.New(fname)
3828 fmts=MEDFileFieldMultiTS()
3829 f1ts=MEDFileField1TS()
3830 for lev in mm.getNonEmptyLevels():
3831 for gt in mm.getGeoTypesAtLevel(lev):
3832 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3833 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3834 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3835 f.setArray(arr) ; f.setName("f0")
3836 f1ts.setFieldNoProfileSBT(f)
3839 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3840 for lev in [0,-1,-3]:
3841 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3843 fmts.pushBackTimeStep(f1ts)
3847 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3848 fs=MEDFileFields(fname)
3849 self.assertEqual(len(fs),1)
3850 self.assertEqual(len(fs[0]),1)
3852 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),'','')])])
3853 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))
3857 def testMEDFileUMeshSetName(self):
3858 """ 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.
3859 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3861 fname="Pyfile79.med"
3862 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3864 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3865 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)
3866 m0.allocateCells(5);
3867 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3868 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3869 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3870 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3871 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3872 m0.setCoords(coords);
3873 mm.setMeshAtLevel(0,m0)
3874 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3876 m2.insertNextCell(NORM_POINT1,[2])
3877 m2.insertNextCell(NORM_POINT1,[3])
3878 m2.insertNextCell(NORM_POINT1,[4])
3879 m2.insertNextCell(NORM_POINT1,[5])
3880 mm.setMeshAtLevel(-2,m2)
3881 self.assertEqual(mm.getName(),"")
3882 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3883 mm.forceComputationOfParts()
3884 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3886 self.assertEqual(mm.getName(),"abc")
3887 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3888 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3889 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3890 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3894 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3895 fileName="Pyfile80.med"
3896 m=MEDCouplingCMesh() ; m.setName("cmesh")
3897 arr=DataArrayDouble(6) ; arr.iota()
3898 m.setCoords(arr,arr)
3899 nbCells=m.getNumberOfCells()
3900 self.assertEqual(25,nbCells)
3901 f=MEDCouplingFieldDouble(ON_CELLS)
3902 f.setName("FieldOnCell") ; f.setMesh(m)
3903 arr=DataArrayDouble(nbCells) ; arr.iota()
3907 fmts=MEDFileFieldMultiTS()
3909 for i in range(nbCells):
3910 t=(float(i)+0.1,i+1,-i-2)
3912 arr2=DataArrayDouble(nbCells)
3913 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3916 f1ts=MEDFileField1TS()
3917 f1ts.setFieldNoProfileSBT(f)
3918 fmts.pushBackTimeStep(f1ts)
3920 fmts.unloadArraysWithoutDataLoss()
3921 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))
3922 fs=MEDFileFields() ; fs.pushField(fmts)
3923 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))
3924 fs.unloadArraysWithoutDataLoss()
3925 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))
3927 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))
3928 f1ts.unloadArraysWithoutDataLoss()
3929 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))
3930 mm.write(fileName,2)
3931 fs.write(fileName,0)
3932 del m,fmts,mm,f,f1ts
3934 mm=MEDFileMesh.New(fileName)
3935 fmts=MEDFileFieldMultiTS(fileName)
3936 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))
3937 fmts.unloadArraysWithoutDataLoss()
3938 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3939 fmts.loadArraysIfNecessary()
3940 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))
3942 fs=MEDFileFields(fileName)
3943 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))
3944 fs.unloadArraysWithoutDataLoss()
3945 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3946 fs.loadArraysIfNecessary()
3947 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))
3949 f1ts=MEDFileField1TS(fileName)
3950 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))
3951 f1ts.unloadArraysWithoutDataLoss()
3952 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3953 f1ts.loadArraysIfNecessary()
3954 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))
3958 def testMEDFileUMeshLoadPart1(self):
3959 """ 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
3960 memory of the returned instance.
3962 fileName="Pyfile81.med"
3963 arr=DataArrayDouble(6) ; arr.iota()
3964 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3965 m=m.buildUnstructured()
3967 m.changeSpaceDimension(3,0.)
3968 infos=["aa [b]","cc [de]","gg [klm]"]
3969 m.getCoords().setInfoOnComponents(infos)
3970 m.checkConsistency()
3972 mm.setMeshAtLevel(0,m)
3973 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
3974 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3975 mm.setMeshAtLevel(-1,m1)
3976 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])
3977 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])
3978 namesCellL0=DataArrayAsciiChar(25,16)
3979 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
3980 renumM1=DataArrayInt([3,4,0,2,1])
3981 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3982 mm.setRenumFieldArr(0,renum0)
3983 mm.setFamilyFieldArr(0,famField0)
3984 mm.setNameFieldAtLevel(0,namesCellL0)
3985 mm.setRenumFieldArr(-1,renumM1)
3986 mm.setFamilyFieldArr(-1,famFieldM1)
3987 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])
3988 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])
3989 namesNodes=DataArrayAsciiChar(36,16)
3990 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
3991 mm.setRenumFieldArr(1,renum1)
3992 mm.setFamilyFieldArr(1,famField1)
3993 mm.setNameFieldAtLevel(1,namesNodes)
3994 mm.setFamilyId("Fam7",77)
3995 mm.setFamilyId("Fam8",88)
3996 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3997 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3998 mm.write(fileName,2)
4000 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4001 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4002 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])))
4003 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)
4004 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4005 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4006 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4007 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4008 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4009 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4010 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4012 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4013 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4014 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])))
4015 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)
4016 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4017 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4018 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4019 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4020 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4021 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4022 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4024 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4025 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4026 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4027 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4028 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4029 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4030 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4031 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4032 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])))
4033 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4034 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)
4035 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4036 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4037 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4038 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4042 def testMEDFileFieldsLoadPart1(self):
4043 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4045 fileName="Pyfile82.med"
4047 compos=["aa [kg]","bbb [m/s]"]
4048 arr=DataArrayDouble(6) ; arr.iota()
4049 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4050 m=m.buildUnstructured()
4052 m.changeSpaceDimension(3,0.)
4053 infos=["aa [b]","cc [de]","gg [klm]"]
4054 m.getCoords().setInfoOnComponents(infos)
4055 m.checkConsistency()
4056 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4058 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4059 arr[:,0]=list(range(25))
4060 arr[:,1]=list(range(100,125))
4062 WriteField(fileName,f,True)
4063 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4064 f.setName("FieldNode")
4065 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4066 arr[:,0]=list(range(200,236))
4067 arr[:,1]=list(range(300,336))
4069 f.checkConsistencyLight()
4070 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4073 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4075 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4076 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4079 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4081 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4083 fs[0][0].loadArrays()
4084 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4085 arr.setInfoOnComponents(compos)
4086 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4087 fs[1][0].loadArrays()
4088 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4089 arr.setInfoOnComponents(compos)
4090 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4094 def testMEDFileWithoutCells1(self):
4095 fileName="Pyfile83.med"
4096 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4097 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4101 mm.write(fileName,2)
4103 mm=MEDFileMesh.New(fileName)
4104 self.assertEqual(mm.getName(),"mesh")
4105 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4109 def testZipCoordsWithLoadPart1(self):
4110 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4112 fileName="Pyfile84.med"
4114 compos=["aa [kg]","bbb [m/s]"]
4115 arr=DataArrayDouble(6) ; arr.iota()
4116 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4117 m=m.buildUnstructured()
4119 m.changeSpaceDimension(3,0.)
4120 infos=["aa [b]","cc [de]","gg [klm]"]
4121 m.getCoords().setInfoOnComponents(infos)
4122 m.checkConsistency()
4123 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4125 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4126 arr[:,0]=list(range(25))
4127 arr[:,1]=list(range(100,125))
4129 WriteField(fileName,f,True)
4130 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4131 f.setName("FieldNode")
4132 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4133 arr[:,0]=list(range(200,236))
4134 arr[:,1]=list(range(300,336))
4136 f.checkConsistencyLight()
4137 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4140 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4142 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4143 self.assertEqual(spd.getSlice(),slice(4,6,1))
4144 spd=mm.getPartDefAtLevel(1)
4145 self.assertEqual(spd.getSlice(),slice(4,14,1))
4146 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4147 mm.zipCoords() # <- The important line is here !
4148 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4149 self.assertEqual(spd.getSlice(),slice(4,6,1))
4150 spd=mm.getPartDefAtLevel(1)
4151 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4152 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4153 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4154 fs[0][0].loadArrays()
4155 arr=DataArrayDouble([(4,104),(5,105)])
4156 arr.setInfoOnComponents(compos)
4157 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4158 fs[1][0].loadArrays()
4159 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4160 arr.setInfoOnComponents(compos)
4161 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4162 m_ref = mm[0].deepCopy()
4163 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4165 mrs = MEDFileMeshReadSelector()
4166 mrs.setNumberOfCoordsLoadSessions(2)
4167 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4169 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4170 self.assertEqual(spd.getSlice(),slice(4,6,1))
4171 spd=mm.getPartDefAtLevel(1)
4172 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4173 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4174 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4175 fs[0][0].loadArrays()
4176 arr=DataArrayDouble([(4,104),(5,105)])
4177 arr.setInfoOnComponents(compos)
4178 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4179 fs[1][0].loadArrays()
4180 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4181 arr.setInfoOnComponents(compos)
4182 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4183 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4187 def testMEDFileCMeshSetGroupsAtLevel(self):
4188 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4190 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4192 mm=MEDFileCMesh() ; mm.setMesh(m)
4193 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4194 mm.setGroupsAtLevel(0,[grp])
4195 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4199 def testMEDFileUMeshBuildExtrudedMesh1(self):
4200 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4201 fileName="Pyfile85.med"
4204 meshName3DOut="Mesh3D"
4206 d1=DataArrayInt([0,4,20,24])
4207 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4209 a=DataArrayDouble(6) ; a.iota()
4210 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4211 m=m.buildUnstructured()
4212 d1c=d1.buildComplement(m.getNumberOfCells())
4213 m=m[d1c] ; m.zipCoords()
4214 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4216 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4217 m.setName(meshName2D)
4218 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4219 e=d.deltaShiftIndex().findIdsEqual(1)
4222 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4223 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4224 mm.setGroupsAtLevel(0,[grp0])
4225 grp1=e ; grp1.setName("grp1")
4226 mm.setGroupsAtLevel(-1,[grp1])
4227 mm.write(fileName,2)
4229 a=DataArrayDouble(3) ; a.iota()
4230 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4231 tmp.setName(meshName1D)
4232 tmp.changeSpaceDimension(3)
4233 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4235 mm1D.setMeshAtLevel(0,tmp)
4236 mm1D.write(fileName,0)
4238 mm2D=MEDFileMesh.New(fileName,meshName2D)
4239 mm1D=MEDFileMesh.New(fileName,meshName1D)
4240 m1D=mm1D.getMeshAtLevel(0)
4241 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4243 self.assertEqual(mm3D.getName(),mm2D.getName())
4244 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4245 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4246 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4247 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4248 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4249 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4250 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4251 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4252 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4253 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.)])
4254 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4255 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])
4256 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4257 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])
4258 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4259 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])
4260 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4261 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])
4262 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4263 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])
4264 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4265 d=DataArrayInt(129) ; d.iota() ; d*=3
4266 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4268 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4269 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4270 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4271 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4272 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])))
4273 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])))
4274 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])))
4275 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])))
4276 mm3D.setName("MeshExtruded")
4277 mm3D.write(fileName,0)
4280 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4282 def testMEDFileUMeshPickeling1(self):
4283 outFileName="Pyfile86.med"
4284 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)
4285 c.setInfoOnComponents(["aa","bbb"])
4286 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4287 m=MEDCouplingUMesh();
4288 m.setMeshDimension(2);
4290 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4291 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4292 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4293 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4294 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4295 m.finishInsertingCells();
4297 m.checkConsistencyLight()
4298 m1=MEDCouplingUMesh.New();
4299 m1.setMeshDimension(1);
4300 m1.allocateCells(3);
4301 m1.insertNextCell(NORM_SEG2,2,[1,4])
4302 m1.insertNextCell(NORM_SEG2,2,[3,6])
4303 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4304 m1.finishInsertingCells();
4306 m1.checkConsistencyLight()
4307 m2=MEDCouplingUMesh.New();
4308 m2.setMeshDimension(0);
4309 m2.allocateCells(4);
4310 m2.insertNextCell(NORM_POINT1,1,[1])
4311 m2.insertNextCell(NORM_POINT1,1,[3])
4312 m2.insertNextCell(NORM_POINT1,1,[2])
4313 m2.insertNextCell(NORM_POINT1,1,[6])
4314 m2.finishInsertingCells();
4316 m2.checkConsistencyLight()
4318 mm=MEDFileUMesh.New()
4319 self.assertTrue(mm.getUnivNameWrStatus())
4320 mm.setName("MyFirstMEDCouplingMEDmesh")
4321 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4325 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4327 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4328 # playing with groups
4329 g1_2=DataArrayInt.New()
4330 g1_2.setValues([1,3],2,1)
4332 g2_2=DataArrayInt.New()
4333 g2_2.setValues([1,2,3],3,1)
4335 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4336 g1_1=DataArrayInt.New()
4337 g1_1.setValues([0,1,2],3,1)
4339 g2_1=DataArrayInt.New()
4340 g2_1.setValues([0,2],2,1)
4342 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4343 g1_N=DataArrayInt.New()
4344 g1_N.setValues(list(range(8)),8,1)
4346 g2_N=DataArrayInt.New()
4347 g2_N.setValues(list(range(9)),9,1)
4349 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4350 mm.createGroupOnAll(0,"GrpOnAllCell")
4351 # check content of mm
4352 t=mm.getGroupArr(0,"G1",False)
4353 self.assertTrue(g1_2.isEqual(t));
4354 t=mm.getGroupArr(0,"G2",False)
4355 self.assertTrue(g2_2.isEqual(t));
4356 t=mm.getGroupArr(-1,"G1",False)
4357 self.assertTrue(g1_1.isEqual(t));
4358 t=mm.getGroupArr(-1,"G2",False)
4359 self.assertTrue(g2_1.isEqual(t));
4360 t=mm.getGroupArr(1,"G1",False)
4361 self.assertTrue(g1_N.isEqual(t));
4362 t=mm.getGroupArr(1,"G2",False)
4363 self.assertTrue(g2_N.isEqual(t));
4364 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4365 t=mm.getGroupArr(0,"GrpOnAllCell")
4367 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4368 mm2=pickle.loads(st)
4369 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4370 self.assertEqual(mm.getAxisType(),AX_CART)
4372 mm.setAxisType(AX_CYL)
4373 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4374 mm2=pickle.loads(st)
4375 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4376 self.assertEqual(mm2.getAxisType(),AX_CYL)
4380 def testMEDFileFieldsLoadSpecificEntities1(self):
4383 fileName="Pyfile87.med"
4387 m=MEDCouplingCMesh()
4388 arr=DataArrayDouble(nbNodes) ; arr.iota()
4390 m=m.buildUnstructured()
4393 fmts=MEDFileFieldMultiTS()
4394 for i in range(nbPdt):
4395 f=MEDCouplingFieldDouble(ON_NODES)
4397 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4399 f.setName(fieldName)
4400 f.setTime(float(i),i,0)
4401 fmts.appendFieldNoProfileSBT(f)
4404 mm=MEDFileUMesh() ; mm[0]=m
4405 fmts.write(fileName,2)
4406 mm.write(fileName,0)
4408 fs=MEDFileFields(fileName,False)
4409 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4410 fs.loadArraysIfNecessary()
4411 fs2.loadArraysIfNecessary()
4412 for i in range(nbPdt):
4413 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4415 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4416 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4417 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4418 fmts=MEDFileFieldMultiTS()
4419 for i in range(nbPdt):
4420 f=MEDCouplingFieldDouble(ON_CELLS)
4422 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4424 f.setName(fieldName)
4425 f.setTime(float(i),i,0)
4426 fmts.appendFieldNoProfileSBT(f)
4428 mm=MEDFileUMesh() ; mm[0]=m3
4430 self.assertEqual(mm.getNonEmptyLevels(),())
4432 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4433 fmts.write(fileName,2)
4434 fs=MEDFileFields(fileName,False)
4435 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4436 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4437 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4438 fs.loadArraysIfNecessary()
4439 fs2.loadArraysIfNecessary()
4440 fs3.loadArraysIfNecessary()
4441 fs4.loadArraysIfNecessary()
4442 for i in range(nbPdt):
4443 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4444 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4445 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4450 def testMEDFileLotsOfTSRW1(self):
4453 fileName="Pyfile88.med"
4454 nbPdt=300 # <- perftest = 30000
4457 maxPdt=100 # <- optimum = 500
4458 m=MEDCouplingCMesh()
4459 arr=DataArrayDouble(nbNodes) ; arr.iota()
4461 m=m.buildUnstructured()
4464 nbOfField=nbPdt//maxPdt
4466 for j in range(nbOfField):
4467 fmts=MEDFileFieldMultiTS()
4468 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4469 for i in range(s.start, s.stop, s.step):
4470 f=MEDCouplingFieldDouble(ON_NODES)
4472 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4474 f.setName("%s_%d"%(fieldName,j))
4475 f.setTime(float(i),i,0)
4476 fmts.appendFieldNoProfileSBT(f)
4481 mm=MEDFileUMesh() ; mm[0]=m
4482 fs.write(fileName,2)
4483 mm.write(fileName,0)
4485 def appendInDict(d,key,val):
4492 allFields=GetAllFieldNames(fileName)
4494 pat=re.compile("([\d]+)([\s\S]+)$")
4495 for st in allFields:
4499 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4502 appendInDict(allFieldsDict,st,'')
4506 for k in allFieldsDict:
4507 if allFieldsDict[k]!=['']:
4508 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4511 for it in allFieldsDict[k]:
4512 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4517 for ii in range(nbIter):
4518 zeResu.pushBackTimeSteps(fmts2.pop())
4521 fs2.pushField(zeResu)
4523 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4527 def testMEDFileMeshRearrangeFamIds1(self):
4528 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4529 fileName="Pyfile89.med"
4530 meshName='Maillage_2'
4532 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)])
4534 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])
4535 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])
4536 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4537 m0.setConnectivity(c0,c0i)
4540 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])
4541 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])
4542 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4543 m1.setConnectivity(c1,c1i)
4546 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])
4547 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4548 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4549 mm[-2]=m2.buildUnstructured()
4551 ref0=DataArrayInt(55) ; ref0[:]=0
4552 mm.setFamilyFieldArr(0,ref0)
4553 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]))
4554 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])
4555 mm.setFamilyFieldArr(-1,ref1)
4556 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])
4557 mm.setFamilyFieldArr(-2,ref2)
4559 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4560 mm.setFamilyId(f,fid)
4561 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4562 mm.setFamiliesOnGroup(grp,fams)
4563 mm.write(fileName,2)
4565 mm=MEDFileMesh.New(fileName)
4566 grp=mm.getGroup(-1,"Groupe_1")
4567 dai=grp.computeFetchedNodeIds()
4570 mm.rearrangeFamilies() # <- the aim of the test
4571 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4572 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4573 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4574 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4575 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])))
4576 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4577 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4578 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4579 for elt,fams in allGrps:
4580 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4581 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4582 for elt,eltId in allFams:
4583 self.assertEqual(mm.getFamilyId(elt),eltId)
4587 def testNonRegrCMeshSetFieldPfl1(self):
4588 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4589 ff=MEDFileField1TS()
4592 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4596 field=MEDCouplingFieldDouble(ON_CELLS)
4598 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4599 field.setName("Field")
4600 field.checkConsistencyLight()
4601 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4602 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4603 self.assertEqual(ff.getPfls(),())
4604 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4605 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4606 del ff,mm,field,field2,pfl
4607 # same with unstructured mesh
4608 ff=MEDFileField1TS()
4611 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4614 m=m.buildUnstructured()
4616 field=MEDCouplingFieldDouble(ON_CELLS)
4618 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4619 field.setName("Field")
4620 field.checkConsistencyLight()
4621 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4622 ff.setFieldProfile(field,mm,0,pfl)
4623 self.assertEqual(ff.getPfls(),())
4624 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4625 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4629 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4631 fileName="Pyfile90.med"
4632 fileName2="Pyfile91.med"
4633 arr=DataArrayDouble(5) ; arr.iota()
4634 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4635 m=m.buildUnstructured()
4636 d=DataArrayInt([3,7,11,15])
4639 m2=m[d.buildComplement(m.getNumberOfCells())]
4640 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4641 m.changeSpaceDimension(3,0.)
4642 arr=DataArrayDouble(3) ; arr.iota()
4643 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4644 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4645 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4646 m3D=m.buildExtrudedMesh(m1D,0)
4647 m3D.sortCellsInMEDFileFrmt()
4648 m3D.setName(meshName)
4649 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4650 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4651 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4654 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4655 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4656 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4657 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4658 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4659 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4660 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4661 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4662 mm.setGroupsAtLevel(0,[vol1,vol2])
4663 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4664 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4666 mmOut1=mm.linearToQuadratic(0,0.)
4667 mmOut1.write(fileName2,2)
4668 mmOut2=mmOut1.quadraticToLinear(0.)
4669 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4673 def testMEDFileMeshAddGroup1(self):
4674 m=MEDCouplingCMesh()
4675 arrX=DataArrayDouble(9) ; arrX.iota()
4676 arrY=DataArrayDouble(4) ; arrY.iota()
4677 m.setCoords(arrX,arrY)
4681 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4683 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4685 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4687 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4689 for grp in [grp0,grp1,grp2,grp3]:
4690 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4691 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4693 for grp in [grp0,grp1,grp2,grp3]:
4694 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4695 mm.addGroup(1,grpNode)
4696 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4697 for grp in [grp0,grp1,grp2,grp3]:
4698 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4699 for grp in [grp0,grp1,grp2,grp3]:
4700 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4701 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4702 mm.normalizeFamIdsMEDFile()
4703 for grp in [grp0,grp1,grp2,grp3]:
4704 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4705 for grp in [grp0,grp1,grp2,grp3]:
4706 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4707 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4711 def testMEDFileJoint1(self):
4712 fileName="Pyfile92.med"
4713 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4714 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4718 mm.setDescription("un maillage")
4719 mm.write(fileName,2)
4720 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4721 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4722 one_step_joint=MEDFileJointOneStep()
4723 one_step_joint.pushCorrespondence(cell_correspond)
4724 one_step_joint.pushCorrespondence(node_correspond)
4725 one_joint=MEDFileJoint()
4726 one_joint.pushStep(one_step_joint)
4727 one_joint.setLocalMeshName("maa1")
4728 one_joint.setRemoteMeshName("maa1")
4729 one_joint.setDescription("joint_description")
4730 one_joint.setJointName("joint_1")
4731 one_joint.setDomainNumber(1)
4732 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4733 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4734 self.assertEqual( one_joint.getDescription(), "joint_description")
4735 self.assertEqual( one_joint.getJointName(), "joint_1")
4736 self.assertEqual( one_joint.getDomainNumber(), 1)
4737 joints=MEDFileJoints()
4738 joints.pushJoint(one_joint);
4739 joints.write(fileName,0)
4741 jointsR=MEDFileJoints(fileName,mm.getName())
4742 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4743 jR = jointsR.getJointAtPos(0)
4744 self.assertTrue( jR.isEqual( one_joint ))
4745 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4746 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4747 jointsR.destroyJointAtPos(0)
4751 def testMEDFileJoint2(self):
4752 fileNameWr="Pyfile93.med"
4753 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4754 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4758 mm.setDescription("un maillage")
4759 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4760 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4761 one_step_joint=MEDFileJointOneStep()
4762 two_step_joint=MEDFileJointOneStep()
4763 one_joint=MEDFileJoint()
4764 two_joint=MEDFileJoint()
4765 one_step_joint.pushCorrespondence(node_correspond)
4766 one_joint.pushStep(one_step_joint)
4767 two_step_joint.pushCorrespondence(cell_correspond)
4768 two_step_joint.pushCorrespondence(node_correspond)
4769 two_joint.pushStep(two_step_joint)
4770 one_joint.setLocalMeshName("maa1")
4771 one_joint.setRemoteMeshName("maa1")
4772 one_joint.setDescription("joint_description_1")
4773 one_joint.setJointName("joint_1")
4774 one_joint.setDomainNumber(1)
4775 two_joint.setLocalMeshName("maa1")
4776 two_joint.setRemoteMeshName("maa1")
4777 two_joint.setDescription("joint_description_2")
4778 two_joint.setJointName("joint_2")
4779 two_joint.setDomainNumber(2)
4780 joints=MEDFileJoints()
4781 joints.pushJoint(one_joint)
4782 joints.pushJoint(two_joint)
4783 mm.setJoints( joints )
4784 mm.write(fileNameWr,2)
4786 mm=MEDFileMesh.New(fileNameWr)
4787 self.assertEqual( mm.getNumberOfJoints(), 2)
4788 jointsR = mm.getJoints();
4789 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4790 self.assertEqual( len( jointsR ), 2 )
4791 jointR1 = jointsR[0]
4792 jointR2 = jointsR[1]
4793 self.assertFalse( jointR1 is None )
4794 self.assertFalse( jointR2 is None )
4795 self.assertTrue( jointR1.isEqual( one_joint ))
4796 self.assertTrue( jointR2.isEqual( two_joint ))
4800 def testMEDFileJoint1(self):
4801 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4802 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4803 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4804 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4805 joint1st_1=MEDFileJointOneStep()
4806 joint1st_1.pushCorrespondence(cell_correspond)
4807 joint1st_1.pushCorrespondence(node_correspond)
4808 joint1st_2=MEDFileJointOneStep()
4809 joint1st_2.pushCorrespondence(cell_correspond)
4810 joint1st_2.pushCorrespondence(node_correspond)
4811 joint1st_3=MEDFileJointOneStep()
4812 joint1st_3.pushCorrespondence(node_correspond)
4813 joint1st_3.pushCorrespondence(cell_correspond)
4814 joint1st_4=MEDFileJointOneStep()
4815 joint1st_4.pushCorrespondence(cell_correspond)
4816 joint1st_5=MEDFileJointOneStep()
4817 joint1st_5.pushCorrespondence(cell_correspon2)
4818 joint1st_6=MEDFileJointOneStep()
4819 joint1st_6.pushCorrespondence(cell_correspon3)
4820 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4821 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4822 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4823 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4824 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4825 one_joint=MEDFileJoint()
4826 one_joint.pushStep(joint1st_1)
4827 one_joint.setLocalMeshName("maa1")
4828 one_joint.setRemoteMeshName("maa2")
4829 one_joint.setDescription("joint_description")
4830 one_joint.setJointName("joint_1")
4831 one_joint.setDomainNumber(1)
4832 self.assertEqual( "maa1", one_joint.getLocalMeshName())
4833 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4834 self.assertEqual( "joint_description", one_joint.getDescription())
4835 self.assertEqual( 1, one_joint.getDomainNumber())
4836 self.assertEqual( "joint_1", one_joint.getJointName())
4839 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4841 def testMEDFileSafeCall0(self):
4842 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4843 fname="Pyfile94.med"
4844 errfname="Pyfile94.err"
4847 # first clean file if needed
4848 if os.path.exists(fname):
4851 # second : build a file from scratch
4852 m=MEDCouplingCMesh()
4853 arr=DataArrayDouble(11) ; arr.iota()
4854 m.setCoords(arr,arr)
4859 # third : change permissions to remove write access on created file
4860 os.chmod(fname, 0o444)
4861 # four : try to append data on file -> check that it raises Exception
4862 f=MEDCouplingFieldDouble(ON_CELLS)
4865 f.setArray(DataArrayDouble(100))
4866 f.getArray()[:]=100.
4867 f.checkConsistencyLight()
4868 f1ts=MEDFileField1TS()
4869 f1ts.setFieldNoProfileSBT(f)
4871 tmp=StdOutRedirect(errfname)
4872 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4875 if os.path.exists(errfname):
4881 def testUnivStatus1(self):
4882 """ Non regression test to check the effectiveness of univ write status."""
4883 fname="Pyfile95.med"
4884 arr=DataArrayDouble(10) ; arr.iota()
4885 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4886 mm=MEDFileCMesh() ; mm.setMesh(m)
4887 mm.setUnivNameWrStatus(False) # test is here
4889 mm=MEDFileCMesh(fname)
4890 self.assertEqual(mm.getUnivName(),"")
4891 mm.setUnivNameWrStatus(True)
4893 mm=MEDFileCMesh(fname)
4894 self.assertTrue(mm.getUnivName()!="")
4898 def testEmptyMesh(self):
4899 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4901 fname = "Pyfile96.med"
4902 m = MEDCouplingUMesh('toto', 2)
4903 m.setCoords(DataArrayDouble([], 0, 2))
4904 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4905 mfu = MEDFileUMesh()
4906 mfu.setMeshAtLevel(0, m)
4908 mfu2 = MEDFileUMesh(fname)
4909 self.assertEqual('toto', mfu2.getName())
4910 lvl = mfu2.getNonEmptyLevels()
4911 self.assertEqual((), lvl)
4913 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4914 def testMEDFileUMeshPickeling2(self):
4915 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4921 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4922 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4923 mesh=MEDFileUMesh() ; mesh[0]=m
4924 m1=m.computeSkin() ; mesh[-1]=m1
4926 bary1=m1.computeCellCenterOfMass()[:,2]
4927 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4928 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4929 mesh.setGroupsAtLevel(-1,[grp1,grp2])
4931 st=pickle.dumps(mesh,2)
4933 st2=pickle.dumps(mm,2)
4934 mm2=pickle.loads(st2)
4935 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4939 def testMEDFileEquivalence1(self):
4940 """ First check of equivalence implementation in MEDFileMesh"""
4941 fileName="Pyfile97.med"
4944 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)])
4945 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4946 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])
4947 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4948 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])
4949 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4950 mm.getFamilyFieldAtLevel(-1)[:]=-2
4951 mm.getFamilyFieldAtLevel(0)[:]=0
4952 mm.addFamily("HOMARD________-1",-1)
4953 mm.addFamily("HOMARD________-2",-2)
4954 mm.addFamily("HOMARD________-3",-3)
4955 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4957 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4958 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."
4959 mm.initializeEquivalences()
4960 eqs=mm.getEquivalences()
4961 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4962 eq0.setDescription(descEq)
4963 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)])
4964 eq0.setArray(-1,corr)
4965 self.assertEqual(eq0.getCell().size(),1)
4966 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4967 eq0.getCell().clear()
4968 self.assertEqual(eq0.getCell().size(),0)
4969 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4970 self.assertEqual(eq0.getCell().size(),1)
4971 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4972 mm.killEquivalences()
4973 mm.initializeEquivalences()
4974 eqs=mm.getEquivalences()
4975 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4976 eq0.setDescription(descEq)
4978 c.setArrayForType(NORM_QUAD4,corr)
4979 self.assertEqual(eq0.getCell().size(),1)
4980 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4982 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4983 self.assertEqual(mm2.getEquivalences().size(),1)
4984 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4985 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4986 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4987 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4988 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4989 mm.write(fileName,2)
4991 mm3=MEDFileMesh.New(fileName)
4992 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4996 def testMEDFileForFamiliesPlayer1(self):
4997 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4998 fileName="Pyfile98.med"
5000 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5001 arr=DataArrayDouble(4) ; arr.iota()
5002 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5003 m=m.buildUnstructured()
5006 mm.setName(meshName)
5007 mm.setFamilyId("FAMILLE_ZERO",0)
5008 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5009 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5010 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5011 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5012 mm.setFamilyFieldArr(1,d)
5013 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5014 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5015 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5016 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5017 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5018 mm.write(fileName,2)
5019 # now read such funny file !
5020 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5021 self.assertTrue(mm.isEqual(mm2,1e-16))
5022 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5023 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5024 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5028 def testCartesianizer1(self):
5029 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5031 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5032 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5033 d0=DataArrayInt(16) ; d0[:]=0
5034 d1=DataArrayInt(9) ; d1[:]=0
5035 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5036 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5037 ref0=mm.getCoords().getHiddenCppPointer()
5038 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5039 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5040 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5041 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5042 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5043 mm.setAxisType(AX_CYL) #<- important
5044 mm2=mm.cartesianize() # the trigger
5045 self.assertEqual(mm2.getAxisType(),AX_CART)
5046 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5047 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5048 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5049 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5050 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5051 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5052 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5053 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5054 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5055 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5056 self.assertEqual(mm2.getName(),mm.getName())
5057 self.assertEqual(mm2.getDescription(),mm.getDescription())
5058 self.assertEqual(mm2.getTime(),mm.getTime())
5059 self.assertEqual(mm2.getTime(),mm.getTime())
5060 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5061 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5062 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5063 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5064 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5065 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5066 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5067 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5069 mm.setAxisType(AX_CART)
5070 mm2=mm.cartesianize() # the trigger
5071 self.assertEqual(mm2.getAxisType(),AX_CART)
5072 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5073 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5074 # CurveLinearMesh non cart
5075 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5076 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5077 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5078 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5079 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5080 mm2=mm.cartesianize() # the trigger
5081 self.assertEqual(mm2.getAxisType(),AX_CART)
5082 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5083 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5084 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5085 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5086 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5087 self.assertEqual(mm2.getName(),mm.getName())
5088 self.assertEqual(mm2.getDescription(),mm.getDescription())
5089 self.assertEqual(mm2.getTime(),mm.getTime())
5090 self.assertEqual(mm2.getTime(),mm.getTime())
5091 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5092 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5093 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5094 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5095 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5096 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5097 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5098 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5099 # CurveLinearMesh cart
5100 mm.setAxisType(AX_CART)
5101 mm2=mm.cartesianize() # the trigger
5102 self.assertEqual(mm2.getAxisType(),AX_CART)
5103 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5104 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5106 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5107 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5108 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5109 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5110 mm2=mm.cartesianize() # the trigger
5111 self.assertEqual(mm2.getAxisType(),AX_CART)
5112 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5113 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5114 self.assertEqual(mm2.getName(),mm.getName())
5115 self.assertEqual(mm2.getDescription(),mm.getDescription())
5116 self.assertEqual(mm2.getTime(),mm.getTime())
5117 self.assertEqual(mm2.getTime(),mm.getTime())
5118 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5119 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5120 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5121 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5122 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5123 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5124 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5125 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5127 mm.setAxisType(AX_CART)
5128 mm2=mm.cartesianize() # the trigger
5129 self.assertEqual(mm2.getAxisType(),AX_CART)
5130 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5131 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5135 def testCheckCoherency(self):
5136 m2 = MEDCouplingUMesh("2d", 2)
5137 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5138 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5139 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5140 mum = MEDFileUMesh()
5141 mum.setMeshAtLevel(0, m2)
5142 mum.setMeshAtLevel(-1, m1)
5143 mum.checkConsistency()
5144 mum2 = mum.deepCopy()
5147 arr = DataArrayInt([2]*4)
5148 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5149 self.assertRaises(InterpKernelException, mum.checkConsistency)
5150 mum=mum2; mum2=mum.deepCopy();
5151 arr = DataArrayInt([2]*4)
5152 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5153 self.assertRaises(InterpKernelException, mum.checkConsistency)
5154 mum=mum2; mum2=mum.deepCopy();
5155 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5156 self.assertRaises(InterpKernelException, mum.checkConsistency)
5157 mum=mum2; mum2=mum.deepCopy();
5158 arr = DataArrayAsciiChar(['tutu x']*4)
5159 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5160 self.assertRaises(InterpKernelException, mum.checkConsistency)
5163 mum=mum2; mum2=mum.deepCopy();
5164 arr = DataArrayInt([2]*2)
5165 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5166 self.assertRaises(InterpKernelException, mum.checkConsistency)
5167 mum=mum2; mum2=mum.deepCopy();
5168 arr = DataArrayInt([2]*2)
5169 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5170 self.assertRaises(InterpKernelException, mum.checkConsistency)
5171 mum=mum2; mum2=mum.deepCopy();
5172 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5173 self.assertRaises(InterpKernelException, mum.checkConsistency)
5174 mum=mum2; mum2=mum.deepCopy();
5175 arr = DataArrayAsciiChar(['tutu x']*2)
5176 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5177 self.assertRaises(InterpKernelException, mum.checkConsistency)
5180 mum=mum2; mum2=mum.deepCopy();
5181 arr = DataArrayInt([2]*5)
5182 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5183 self.assertRaises(InterpKernelException, mum.checkConsistency)
5184 mum=mum2; mum2=mum.deepCopy();
5185 arr = DataArrayInt([2]*5)
5186 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5187 self.assertRaises(InterpKernelException, mum.checkConsistency)
5188 mum=mum2; mum2=mum.deepCopy();
5189 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5190 self.assertRaises(InterpKernelException, mum.checkConsistency)
5191 mum=mum2; mum2=mum.deepCopy();
5192 arr = DataArrayAsciiChar(['tutu x']*5)
5193 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5194 self.assertRaises(InterpKernelException, mum.checkConsistency)
5197 def testCheckSMESHConsistency(self):
5198 m2 = MEDCouplingUMesh("2d", 2)
5199 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5200 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5201 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5202 mum = MEDFileUMesh()
5203 mum.setMeshAtLevel(0, m2)
5204 mum.setMeshAtLevel(-1, m1)
5205 mum.checkConsistency()
5206 mum.checkSMESHConsistency()
5207 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5208 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5209 mum.setRenumFieldArr(0, n2)
5210 mum.setRenumFieldArr(-1, n1)
5211 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5212 mum.setRenumFieldArr(-1, n1+100)
5213 mum.checkSMESHConsistency()
5217 def testClearNodeAndCellNumbers(self):
5218 m2 = MEDCouplingUMesh("2d", 2)
5219 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5220 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5221 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5222 mum = MEDFileUMesh()
5223 mum.setMeshAtLevel(0, m2)
5224 mum.setMeshAtLevel(-1, m1)
5225 mum.checkConsistency()
5226 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5227 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5228 mum.setRenumFieldArr(0, n2)
5229 mum.setRenumFieldArr(-1, n1)
5230 mum.clearNodeAndCellNumbers()
5231 mum.checkSMESHConsistency()
5235 def testCMeshSetFamilyFieldArrNull(self):
5237 fname="Pyfile99.med"
5238 arrX=DataArrayDouble([0,1,2,3])
5239 arrY=DataArrayDouble([0,1,2])
5240 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5241 mm=MEDFileCMesh() ; mm.setMesh(m)
5242 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5243 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5244 mm.setFamilyFieldArr(0,famCellIds)
5245 mm.setFamilyFieldArr(1,famNodeIds)
5247 mm=MEDFileMesh.New(fname)
5248 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5249 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5250 mm.setFamilyFieldArr(0,None)#<- bug was here
5251 mm.setFamilyFieldArr(1,None)#<- bug was here
5252 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5253 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5255 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5256 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5258 mm2=MEDFileMesh.New(fname)
5259 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5260 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5264 def testAppendFieldProfileOnIntField(self):
5265 fname="Pyfile100.med"
5266 arrX=DataArrayDouble([0,1,2,3])
5267 arrY=DataArrayDouble([0,1,2])
5268 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5272 fmts=MEDFileIntFieldMultiTS()
5274 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5275 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5276 fieldName="FieldOnCell"
5277 f.setTime(1.2,1,1) ; f.setName(fieldName)
5278 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5279 fmts.appendFieldProfile(f,mm,0,pfl)
5284 mm=MEDFileMesh.New(fname)
5285 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5286 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5287 self.assertEqual(fmts.getName(),fieldName)
5288 self.assertEqual(len(fmts),1)
5290 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5291 self.assertEqual(pfltest.getName(),pflName)
5292 self.assertEqual(ftest.getName(),fieldName)
5293 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5294 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5295 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5296 self.assertEqual(ftest2.getTime(),f.getTime())
5297 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5301 def testMEDFileFieldEasyField1(self):
5302 """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."""
5303 ## Basic test on cells on top level
5304 fname="Pyfile101.med"
5307 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5308 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5310 m.insertNextCell(NORM_TRI3,[0,1,2])
5311 m.insertNextCell(NORM_TRI3,[3,4,5])
5312 m.insertNextCell(NORM_TRI3,[6,7,8])
5313 m.insertNextCell(NORM_TRI3,[9,10,11])
5314 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5315 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5318 arr0=DataArrayDouble([10,11,12,13,100,101])
5319 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5320 f.setName(fieldName) ; f.setTime(2.,6,7)
5322 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5324 arr2=arr0+1000 ; f.setArray(arr2)
5325 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5329 mm=MEDFileMesh.New(fname)
5330 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5331 ftst0=f1ts.field(mm)
5332 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5333 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5334 ftst1=f1ts.field(mm)
5335 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5336 fmts=MEDFileFieldMultiTS(fname,fieldName)
5337 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5338 ## Basic test on nodes on top level
5339 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5340 f2.setName(fieldName)
5342 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5344 mm=MEDFileMesh.New(fname)
5345 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5346 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5347 fmts=MEDFileFieldMultiTS(fname,fieldName)
5348 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5350 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)
5351 f3.setName(fieldName) ; f3.checkConsistencyLight()
5352 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5354 mm=MEDFileMesh.New(fname)
5355 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5356 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5358 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5359 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])
5360 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)
5361 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)
5362 f4.checkConsistencyLight()
5363 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5365 mm=MEDFileMesh.New(fname)
5366 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5367 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5371 def testMEDFileFieldEasyField2(self):
5372 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5373 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."""
5374 ## Basic test on cells on top level
5375 fname="Pyfile102.med"
5378 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5379 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5381 m.insertNextCell(NORM_TRI3,[0,1,2])
5382 m.insertNextCell(NORM_TRI3,[3,4,5])
5383 m.insertNextCell(NORM_TRI3,[6,7,8])
5384 m.insertNextCell(NORM_TRI3,[9,10,11])
5385 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5386 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5389 arr0=DataArrayInt32([10,11,12,13,100,101])
5390 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5391 f.setName(fieldName) ; f.setTime(2.,6,7)
5393 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5395 arr2=arr0+1000 ; f.setArray(arr2)
5396 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5400 mm=MEDFileMesh.New(fname)
5401 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5402 ftst0=f1ts.field(mm)
5403 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5404 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5405 ftst1=f1ts.field(mm)
5406 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5407 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5408 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5409 ## Basic test on nodes on top level
5410 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5411 f2.setName(fieldName)
5413 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5415 mm=MEDFileMesh.New(fname)
5416 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5417 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5418 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5419 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5421 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)
5422 f3.setName(fieldName) ; f3.checkConsistencyLight()
5423 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5425 mm=MEDFileMesh.New(fname)
5426 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5427 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5429 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5430 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])
5431 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)
5432 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)
5433 f4.checkConsistencyLight()
5434 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5436 mm=MEDFileMesh.New(fname)
5437 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5438 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5442 def testMEDFileFieldEasyField3(self):
5443 """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."""
5444 fname="Pyfile103.med"
5447 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5448 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5450 m.insertNextCell(NORM_TRI3,[0,1,2])
5451 m.insertNextCell(NORM_TRI3,[3,4,5])
5452 m.insertNextCell(NORM_TRI3,[6,7,8])
5453 m.insertNextCell(NORM_TRI3,[9,10,11])
5454 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5455 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5457 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5459 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5460 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5464 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5465 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5467 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5468 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5469 # here f1 lying on level -1 not 0 check if "field" method detect it !
5470 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5471 f1.setMesh(mm[-1]) # -1 is very important
5473 f1.checkConsistencyLight()
5475 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5477 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5478 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5480 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5481 f3.setMesh(mm[-1]) # this line is important
5482 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)
5483 f3.setName(fieldName) ; f3.checkConsistencyLight()
5484 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5486 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5487 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5489 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5490 f4.setMesh(mm[-1]) # this line is important
5491 f4.setName(fieldName)
5492 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])
5493 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)
5494 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)
5495 f4.checkConsistencyLight()
5496 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5497 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5498 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5502 def testMEDFileFieldEasyField4(self):
5503 """ Same than testMEDFileFieldEasyField3 but with integers"""
5504 fname="Pyfile104.med"
5507 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5508 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5510 m.insertNextCell(NORM_TRI3,[0,1,2])
5511 m.insertNextCell(NORM_TRI3,[3,4,5])
5512 m.insertNextCell(NORM_TRI3,[6,7,8])
5513 m.insertNextCell(NORM_TRI3,[9,10,11])
5514 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5515 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5517 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5519 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5520 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5524 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5525 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5527 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5528 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5529 # here f1 lying on level -1 not 0 check if "field" method detect it !
5530 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5531 f1.setMesh(mm[-1]) # -1 is very important
5533 f1.checkConsistencyLight()
5535 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5537 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5538 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5540 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5541 f3.setMesh(mm[-1]) # this line is important
5542 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)
5543 f3.setName(fieldName) ; f3.checkConsistencyLight()
5544 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5546 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5547 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5549 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5550 f4.setMesh(mm[-1]) # this line is important
5551 f4.setName(fieldName)
5552 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])
5553 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)
5554 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)
5555 f4.checkConsistencyLight()
5556 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5557 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5558 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5562 def testMEDFileFieldEasyField5(self):
5563 """More and more difficult now look at how profiles are managed by "field" method."""
5564 fname="Pyfile105.med"
5567 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5568 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5570 m.insertNextCell(NORM_TRI3,[0,1,2])
5571 m.insertNextCell(NORM_TRI3,[3,4,5])
5572 m.insertNextCell(NORM_TRI3,[6,7,8])
5573 m.insertNextCell(NORM_TRI3,[9,10,11])
5574 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5575 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5578 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5579 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5581 arr0=DataArrayDouble([10,11,12,13])
5582 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5583 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5584 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5587 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5588 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5589 # more complicated -> multi level
5590 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5592 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5593 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5595 mm2[0]=m0 ; mm2[-1]=m
5597 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5599 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5600 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5604 def testExtractPart1(self):
5605 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)])
5607 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5608 m0.insertNextCell(NORM_TRI3,[8,4,3])
5609 m0.insertNextCell(NORM_TRI3,[8,9,4])
5610 m0.insertNextCell(NORM_TRI3,[7,13,8])
5611 m0.insertNextCell(NORM_TRI3,[7,12,13])
5612 m0.insertNextCell(NORM_TRI3,[0,6,1])
5613 m0.insertNextCell(NORM_TRI3,[0,5,6])
5614 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5615 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5616 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5617 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5618 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5620 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5621 m1.insertNextCell(NORM_SEG2,[10,5])
5622 m1.insertNextCell(NORM_SEG2,[5,0])
5623 m1.insertNextCell(NORM_SEG2,[0,1])
5624 m1.insertNextCell(NORM_SEG2,[1,2])
5625 m1.insertNextCell(NORM_SEG2,[2,3])
5626 m1.insertNextCell(NORM_SEG2,[3,4])
5627 m1.insertNextCell(NORM_SEG2,[4,9])
5628 m1.insertNextCell(NORM_SEG2,[9,14])
5629 m1.insertNextCell(NORM_SEG2,[14,13])
5630 m1.insertNextCell(NORM_SEG2,[13,12])
5631 m1.insertNextCell(NORM_SEG2,[12,11])
5632 m1.insertNextCell(NORM_SEG2,[11,10])
5634 mm[0]=m0 ; mm[-1]=m1
5635 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5637 tab[0]=DataArrayInt([0,2,3,4,6,7])
5638 tab[-1]=DataArrayInt([2,3,4,5,9])
5640 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5644 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5647 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5648 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5649 f0.setMesh(m0) ; f0.setName(fname0)
5650 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5651 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5652 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]))
5653 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5654 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5655 fmts.pushBackTimeStep(f1ts)
5657 mmOut=mm.extractPart(tab)
5659 fsPart0=fs.extractPart(tab,mm)
5660 self.assertEqual(len(fsPart0),1)
5662 self.assertEqual(len(fmtsP),1)
5664 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5666 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5667 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5669 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5670 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5671 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5672 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5673 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5675 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5676 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5677 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5678 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5679 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5680 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5681 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5682 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5683 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5684 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5686 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5687 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5688 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5690 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5691 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5692 for i,tt in enumerate(tss):
5693 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5694 myarr=arr0_0+i*1000.
5696 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5697 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5699 fsPart1=fs.extractPart(tab,mm)
5700 self.assertEqual(len(fsPart1),1)
5702 self.assertEqual(len(fmtsP),len(tss))
5703 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5704 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5705 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5706 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5707 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5708 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5709 self.assertEqual(fPart.getTime(),list(tt))
5714 def testSymmetryPlusAggregationMFD1(self):
5715 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5716 fname1="Pyfile106_1.med"
5717 fname2="Pyfile106_2.med"
5718 fname3="Pyfile106_3.med"
5721 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5723 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5724 mm1_0.setCoords(da1)
5725 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5726 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5727 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5728 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5729 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5731 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5732 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5734 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5735 mm1_1.setCoords(da1)
5736 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5737 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5738 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5739 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5740 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5741 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5743 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5744 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5745 for i in range(1,10):
5746 mm1.setFamilyId("F%d"%i,i)
5747 mm1.setFamilyId("FAMILLE_ZERO",0)
5748 mm1.setFamilyId("H1",100)
5749 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5750 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5751 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5752 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5755 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]"])
5757 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5758 mm2_0.setCoords(da1)
5759 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5760 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5761 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5762 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5764 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5765 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5767 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5768 mm2_1.setCoords(da1)
5769 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5770 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5771 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5772 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5773 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5774 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5775 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5776 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5778 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5779 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5780 for i in range(1,12):
5781 mm2.setFamilyId("G%d"%i,i+30)
5782 mm2.setFamilyId("H1",100)
5783 mm2.setFamilyId("FAMILLE_ZERO",0)
5784 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5785 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5786 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5787 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5789 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5791 def CheckMesh(tester,mm):
5792 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]"])
5793 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5794 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])))
5795 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5796 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])))
5797 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5798 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5799 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5800 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5801 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5802 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)]
5803 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5804 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5805 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5806 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5813 infoc=["dd [W]","eee [kA]"]
5815 fmts1=MEDFileFieldMultiTS()
5816 f1ts1=MEDFileField1TS()
5817 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5818 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5819 arr1.setInfoOnComponents(infoc)
5820 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5821 f1_1.checkConsistencyLight()
5822 f1ts1.setFieldNoProfileSBT(f1_1)
5824 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5825 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5826 arr2.setInfoOnComponents(infoc)
5827 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5828 f1_2.checkConsistencyLight()
5829 f1ts1.setFieldNoProfileSBT(f1_2)
5830 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5831 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5832 arr3.setInfoOnComponents(infoc)
5833 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5834 f1_3.checkConsistencyLight()
5835 f1ts1.setFieldNoProfileSBT(f1_3)
5836 fmts1.pushBackTimeStep(f1ts1)
5838 f1ts2=f1ts1.deepCopy()
5839 f1ts2.setTime(t2[1],t2[2],t2[0])
5840 f1ts2.getUndergroundDataArray()[:]+=2000
5841 fmts1.pushBackTimeStep(f1ts2)
5843 fmts2=MEDFileFieldMultiTS()
5844 f1ts3=MEDFileField1TS()
5845 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5846 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5847 arr4.setInfoOnComponents(infoc)
5848 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5849 f2_1.checkConsistencyLight()
5850 f1ts3.setFieldNoProfileSBT(f2_1)
5851 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5852 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5853 arr5.setInfoOnComponents(infoc)
5854 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5855 f2_2.checkConsistencyLight()
5856 f1ts3.setFieldNoProfileSBT(f2_2)
5857 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5858 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5859 arr6.setInfoOnComponents(infoc)
5860 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5861 f2_3.checkConsistencyLight()
5862 f1ts3.setFieldNoProfileSBT(f2_3)
5863 fmts2.pushBackTimeStep(f1ts3)
5865 f1ts4=f1ts3.deepCopy()
5866 f1ts4.setTime(t2[1],t2[2],t2[0])
5867 f1ts4.getUndergroundDataArray()[:]+=2000
5868 fmts2.pushBackTimeStep(f1ts4)
5871 mfd1.setMeshes(MEDFileMeshes())
5872 mfd1.getMeshes().pushMesh(mm1)
5873 mfd1.setFields(MEDFileFields())
5874 mfd1.getFields().pushField(fmts1)
5877 mfd2.setMeshes(MEDFileMeshes())
5878 mfd2.getMeshes().pushMesh(mm2)
5879 mfd2.setFields(MEDFileFields())
5880 mfd2.getFields().pushField(fmts2)
5882 mfd=MEDFileData.Aggregate([mfd1,mfd2])
5883 def CheckMFD(tester,mfd):
5884 tester.assertEqual(len(mfd.getMeshes()),1)
5885 tester.assertEqual(len(mfd.getFields()),1)
5886 CheckMesh(self,mfd.getMeshes()[0])
5887 tester.assertEqual(len(mfd.getFields()[0]),2)
5888 zeF1=mfd.getFields()[0][0]
5889 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5890 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5891 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5892 ref.renumberCells(o2n)
5893 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5894 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5895 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5896 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5897 ref.renumberCells(o2n)
5898 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5899 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5900 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5901 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5902 ref.renumberCells(o2n)
5903 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5905 zeF2=mfd.getFields()[0][1]
5906 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5907 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5908 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5909 ref.renumberCells(o2n)
5910 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5911 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5912 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5913 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5914 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5915 ref.renumberCells(o2n)
5916 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5917 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5918 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5919 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5920 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5921 ref.renumberCells(o2n)
5922 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5923 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5925 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5926 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5931 def testAggregateWithGroups(self):
5932 """ Testing MEDFileUMesh::Aggretate when groups are present. """
5933 def generate(grp_name, offset):
5934 coo = DataArrayDouble([0., 1., 2.])
5936 m = MEDCouplingCMesh("toto")
5937 m.setCoords(coo, coo)
5938 m = m.buildUnstructured()
5939 mu = MEDFileUMesh.New()
5940 mu.setMeshAtLevel(0, m)
5941 g = DataArrayInt([0])
5943 g2 = DataArrayInt([1])
5944 g2.setName("common") # make a common group for all meshes being merged
5945 mu.setGroupsAtLevel(0, [g, g2])
5948 m1 = generate("A", 0.)
5949 m2 = generate("B", 2.)
5950 mm = MEDFileUMesh.Aggregate([m1,m2])
5952 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
5953 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
5954 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
5955 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5956 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5957 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
5958 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
5959 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
5960 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
5965 def testExtrudedMesh1(self):
5966 fname="Pyfile107.med"
5967 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
5968 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
5969 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
5972 ex2=mm.convertToExtrudedMesh()
5973 mm2=MEDFileMesh.New(fname)
5974 ex3=mm2.convertToExtrudedMesh()
5975 self.assertTrue(ex.isEqual(ex2,1e-12))
5976 self.assertTrue(ex.isEqual(ex3,1e-12))
5979 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
5981 def testWriteInto30(self):
5982 fname="Pyfile108.med"
5983 fname2="Pyfile109.med"
5984 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
5985 mm=MEDFileUMesh() ; mm[0]=m
5986 mm.setFamilyId("FAMILLE_ZERO",0)
5989 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
5990 mm2=MEDFileUMesh(fname)
5991 self.assertTrue(mm.isEqual(mm2,1e-12))
5994 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
5997 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5999 def testPickelizationOfMEDFileObjects1(self):
6000 fname="Pyfile110.med"
6001 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)
6002 m0=MEDCouplingUMesh("Mesh",2)
6004 m0.insertNextCell(NORM_TRI3,[1,4,2])
6005 m0.insertNextCell(NORM_TRI3,[4,5,2])
6006 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6007 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6008 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6009 m0.finishInsertingCells()
6011 m1=MEDCouplingUMesh(m0.getName(),1)
6013 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6015 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6017 m1.finishInsertingCells()
6021 m.setMeshAtLevel(0,m0)
6022 m.setMeshAtLevel(-1,m1)
6024 dt=3 ; it=2 ; tim=4.5
6025 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6026 fieldNode0.setName("fieldNode0")
6027 fieldNode0.setTime(tim,dt,it)
6028 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6029 arr=DataArrayDouble([10,11,12,13,14])
6030 fieldNode0.setArray(arr)
6031 f0=MEDFileField1TS()
6032 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6033 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6034 fieldNode1.setName("fieldNode1")
6035 fieldNode1.setTime(tim,dt,it)
6036 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6037 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6038 fieldNode1.setArray(arr1)
6039 f1=MEDFileField1TS()
6040 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6042 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6043 mfd.getMeshes().pushMesh(m)
6044 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6045 mfd.getFields().pushField(fmts)
6046 # first start gently
6049 self.assertEqual(len(mfd2.getMeshes()),1)
6050 self.assertEqual(len(mfd2.getFields()),1)
6051 self.assertEqual(len(mfd2.getFields()[0]),1)
6052 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6053 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6054 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6055 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6056 # OK now end of joke -> serialization of MEDFileData
6057 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6058 mfd3=pickle.loads(st)
6060 self.assertEqual(len(mfd3.getMeshes()),1)
6061 self.assertEqual(len(mfd3.getFields()),1)
6062 self.assertEqual(len(mfd3.getFields()[0]),1)
6063 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6064 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6065 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6066 # serialization of MEDFileFields
6067 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6068 fs4=pickle.loads(st)
6069 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6070 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6071 # serialization of MEDFileFieldMulitTS
6072 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6073 fmts5=pickle.loads(st)
6074 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6075 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6076 # serialization of MEDFileField1TS
6077 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6078 f1ts6=pickle.loads(st)
6079 ff6=f1ts6.field(mfd3.getMeshes()[0])
6080 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6081 # serialization of MEDFileMeshes
6082 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6083 ms7=pickle.loads(st)
6084 self.assertEqual(len(ms7),1)
6085 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6088 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6090 def testPickelizationOfMEDFileObjects2(self):
6092 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6093 mm=MEDFileMesh.New("MEDFileMesh5.med")
6094 self.assertTrue(isinstance(mm,MEDFileCMesh))
6095 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6096 mm2=pickle.loads(st)
6097 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6098 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6100 self.internalCurveLinearMesh1() # generates Pyfile55.med
6101 mm=MEDFileMesh.New("Pyfile55.med")
6102 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6103 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6104 mm3=pickle.loads(st)
6105 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6106 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6107 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6108 # MEDFileIntFieldMultiTS
6109 fs4=MEDFileFields("Pyfile63.med")
6110 ms4=MEDFileMeshes("Pyfile63.med")
6111 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6112 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6113 fmts5=pickle.loads(st)
6114 self.assertEqual(len(fs4[0]),len(fmts5))
6115 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6116 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6117 # MEDFileIntField1TS
6118 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6119 f1ts6=pickle.loads(st)
6120 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6121 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6123 self.internalParameters1()# generates Pyfile56.med
6124 params=MEDFileParameters("Pyfile56.med")
6125 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6126 params7=pickle.loads(st)
6127 self.assertEqual(len(params),len(params7))
6128 for i in range(len(params)):
6129 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6134 def testGlobalNumOnNodes1(self):
6135 """Test global number on nodes here. Used by partitionners."""
6136 fname="Pyfile112.med"
6137 arr=DataArrayDouble(5) ; arr.iota()
6138 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6142 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6143 d=DataArrayInt([7,8,9,2,0])
6145 mm.setGlobalNumFieldAtLevel(1,d)
6146 mm.checkConsistency()
6147 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6148 mm.checkConsistency()
6149 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6150 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6152 mm2=MEDFileMesh.New(fname)
6153 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6154 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6155 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6156 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6157 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6158 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6162 def testPartialReadOfEntities1(self):
6163 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6164 fname="Pyfile113.med"
6165 arr=DataArrayDouble(5) ; arr.iota()
6166 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6173 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6174 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6176 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6177 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6179 f1ts=MEDFileField1TS()
6180 f1ts.setFieldNoProfileSBT(f1)
6181 f1ts.setFieldNoProfileSBT(f2)
6182 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6183 f1ts_2=f1ts.deepCopy()
6184 f1ts_2.getUndergroundDataArray()[:]+=2
6185 f1ts_2.setTime(3,4,6.)
6186 fmts=MEDFileFieldMultiTS()
6187 fmts.pushBackTimeStep(f1ts)
6188 fmts.pushBackTimeStep(f1ts_2)
6193 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6194 mm=MEDFileMesh.New(fname)
6195 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)
6197 self.assertEqual(len(fs),1)
6199 self.assertEqual(len(fmts),2)
6200 ff0=fmts[0] ; ff1=fmts[1]
6201 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6202 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6203 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6204 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6208 def testFloat32InMEDFileFieldStar1(self):
6209 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6210 fname="Pyfile114.med"
6211 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6212 f1=f1.convertToFloatField()
6214 mm1=MEDFileUMesh.New()
6215 mm1.setCoords(m1.getCoords())
6216 mm1.setMeshAtLevel(0,m1)
6217 mm1.setName(m1.getName())
6219 ff1=MEDFileFloatField1TS()
6220 ff1.setFieldNoProfileSBT(f1)
6221 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6222 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6223 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6225 a,b=ff1.getUndergroundDataArrayExt()
6226 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6227 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6228 ff2=MEDFileAnyTypeField1TS.New(fname)
6229 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6230 self.assertEqual(ff2.getTime(),[0,1,2.0])
6231 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6232 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6233 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6234 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6236 c=ff2.getUndergroundDataArray() ; c*=2
6237 ff2.write(fname,0) # 2 time steps in
6238 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6239 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6240 self.assertEqual(len(ffs1),2)
6241 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6242 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6243 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6244 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6245 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6246 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6247 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6248 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6249 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6250 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6251 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6253 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6256 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6257 nf1=MEDCouplingFieldFloat(ON_NODES)
6258 nf1.setTime(9.,10,-1)
6259 nf1.setMesh(f1.getMesh())
6260 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6261 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6262 nff1=MEDFileFloatField1TS.New()
6263 nff1.setFieldNoProfileSBT(nf1)
6264 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6265 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6268 nf2=MEDCouplingFieldFloat(ON_NODES)
6269 nf2.setTime(19.,20,-11)
6270 nf2.setMesh(f1.getMesh())
6271 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6272 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6273 nff2=MEDFileFloatField1TS.New()
6274 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6275 nff2.setFieldProfile(nf2,mm1,0,npfl)
6276 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6277 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6278 self.assertTrue(b.isEqual(npfl))
6279 self.assertTrue(a.isEqual(narr2,1e-7))
6281 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6282 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6283 self.assertTrue(b.isEqual(npfl))
6284 self.assertTrue(a.isEqual(narr2,1e-7))
6286 nf3=MEDCouplingFieldDouble(ON_NODES)
6287 nf3.setName("VectorFieldOnNodesDouble")
6288 nf3.setTime(29.,30,-21)
6289 nf3.setMesh(f1.getMesh())
6290 nf3.setArray(f1.getMesh().getCoords())
6291 nff3=MEDFileField1TS.New()
6292 nff3.setFieldNoProfileSBT(nf3)
6294 fs=MEDFileFields(fname)
6295 self.assertEqual(len(fs),4)
6296 ffs=[it for it in fs]
6297 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6298 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6299 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6300 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6302 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6303 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6304 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6305 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6306 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6308 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6309 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6310 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6311 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6312 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6313 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6314 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6315 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6317 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6318 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6319 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6320 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6324 def testPenta18_1(self):
6325 """EDF8478 : Test of read/write of penta18"""
6326 fname="Pyfile115.med"
6327 arr=DataArrayDouble([
6328 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6329 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6330 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6331 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6332 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6333 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6334 m=MEDCouplingUMesh("mesh",3)
6337 m.insertNextCell(NORM_PENTA18,list(range(18)))
6338 m.checkConsistencyLight()
6340 f=MEDCouplingFieldDouble(ON_NODES)
6342 f.setName("FieldOnPenta18")
6343 f.setArray(DataArrayDouble(list(range(18))))
6344 f.checkConsistencyLight()
6346 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6348 f2=MEDCouplingFieldDouble(ON_NODES)
6350 f2.setName("FieldOnPenta18Sub")
6351 f2.setArray(DataArrayDouble(list(range(18))))
6352 f2.checkConsistencyLight()
6353 WriteField(fname,f2,True)
6355 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6356 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6357 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6361 def testFieldsLinearToQuadratic(self):
6362 fname="Pyfile117.med"
6363 arr=DataArrayDouble([0,1])
6364 m=MEDCouplingCMesh();
6365 m.setCoords(arr,arr,arr)
6366 m=m.buildUnstructured()
6368 m2.translate([2,0,0])
6369 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6373 mmq=mm.linearToQuadratic(0)
6374 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6375 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6377 f=MEDCouplingFieldDouble(ON_NODES)
6381 arr=DataArrayDouble(m3.getNumberOfNodes())
6384 f1ts=MEDFileField1TS()
6385 f1ts.setFieldNoProfileSBT(f)
6386 fmts=MEDFileFieldMultiTS()
6387 fmts.pushBackTimeStep(f1ts)
6388 f1ts_2=f1ts.deepCopy()
6389 f1ts_2.setTime(3,4,5.)
6390 f1ts_2.getUndergroundDataArray()[:]*=2.
6391 fmts.pushBackTimeStep(f1ts_2)
6394 fs2=fs.linearToQuadratic(mms,mmsq)
6395 self.myTester1(fs2,mmsq[0])
6396 # A small Write/Read and test again
6397 mms.write(fname,2) ; fs.write(fname,0)
6398 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6399 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6400 fs2=fs.linearToQuadratic(mms,mmqs)
6401 self.myTester1(fs2,mmqs[0])
6404 def myTester1(self,fs2,mmq):
6405 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)
6406 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])
6407 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])
6408 fToTest=fs2[0][0].field(mmq)
6409 self.assertEqual(fToTest.getTime(),[3.,1,2])
6410 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6411 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6412 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6413 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6414 # testing 2nd timestep
6415 fToTest=fs2[0][1].field(mmq)
6416 self.assertEqual(fToTest.getTime(),[5.,3,4])
6417 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6418 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6419 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6420 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6424 def testFieldsLinearToQuadratic2(self):
6425 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6426 GeneratePyfile18(self)
6427 fname="Pyfile118.med"
6428 arr=DataArrayDouble([0,1])
6429 m=MEDCouplingCMesh();
6430 m.setCoords(arr,arr,arr)
6431 m=m.buildUnstructured()
6433 m2.translate([2,0,0])
6434 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6436 # add a point for fun
6437 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6441 mmq=mm.linearToQuadratic(0)
6442 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6443 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6445 f=MEDCouplingFieldDouble(ON_NODES)
6449 arr=DataArrayDouble(8) ; arr.iota()
6452 f1ts=MEDFileField1TS()
6453 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6454 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6455 f1ts_2=f1ts.deepCopy()
6456 f1ts_2.setTime(3,4,5.)
6457 f1ts_2.getUndergroundDataArray()[:]*=4.
6458 fmts=MEDFileFieldMultiTS()
6459 fmts.pushBackTimeStep(f1ts)
6460 fmts.pushBackTimeStep(f1ts_2)
6463 fs2=fs.linearToQuadratic(mms,mmsq)
6464 mms.write(fname,2) ; fs.write(fname,0)
6466 self.myTester2(fs2,mmq)
6468 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6469 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6470 fs2=fs.linearToQuadratic(mms,mmqs)
6471 self.myTester2(fs2,mmq)
6472 ## More vicious add single node 16
6475 mmq=mm.linearToQuadratic(0)
6476 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6477 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6479 f=MEDCouplingFieldDouble(ON_NODES)
6483 arr=DataArrayDouble(9) ; arr.iota()
6486 f1ts=MEDFileField1TS()
6487 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6488 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6489 fmts=MEDFileFieldMultiTS()
6490 fmts.pushBackTimeStep(f1ts)
6493 fs2=fs.linearToQuadratic(mms,mmsq)
6495 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")
6496 f1tsToTest=fs2[0][0]
6497 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])
6498 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6499 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6500 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6503 def myTester2(self,fs2,mmq):
6504 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")
6505 f1tsToTest=fs2[0][0]
6506 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])
6507 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6508 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6509 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6510 fToTest=fs2[0][0].field(mmq)
6511 self.assertEqual(fToTest.getTime(),[3.,1,2])
6512 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6513 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])))
6514 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))
6515 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6517 f1tsToTest=fs2[0][1]
6518 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6519 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6520 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6521 fToTest=fs2[0][1].field(mmq)
6522 self.assertEqual(fToTest.getTime(),[5.,3,4])
6523 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6524 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])))
6525 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))
6526 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6531 def testSetFieldProfileFlatly1(self):
6532 """ 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
6534 arr=DataArrayDouble(10) ; arr.iota()
6535 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6536 m=m.buildUnstructured()
6539 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6543 f=MEDCouplingFieldDouble(ON_CELLS)
6545 arr=DataArrayDouble(m.getNumberOfCells())
6549 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6551 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6552 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6554 f1ts=MEDFileField1TS()
6555 f1ts.setFieldProfile(f,mm,0,pfl)
6556 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6557 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6558 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6560 f1ts=MEDFileField1TS()
6561 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6562 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6563 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6564 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6565 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6566 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6570 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6571 """ Here multi level groups are created"""
6572 arr=DataArrayDouble(11) ; arr.iota()
6573 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6574 m=m.buildUnstructured()
6576 m1=m.buildDescendingConnectivity()[0]
6581 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6582 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6583 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6584 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6585 ################ ajouter un groupe sur plusieurs niveau
6587 mm.addGroup(-1,grp2)
6588 mm.addGroup(0,grp0_0)
6589 mm.addGroup(-1,grp0_1)
6590 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6591 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6592 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6593 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6594 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6595 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6596 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6597 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6598 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6599 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6600 mm.removeGroupAtLevel(0,grpName)
6601 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6602 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6603 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6604 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6605 mm.removeGroupAtLevel(-1,grpName)
6606 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6607 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6608 mm.addGroup(-1,grp0_1)
6609 mm.addGroup(0,grp0_0)
6610 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6611 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6612 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6613 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6614 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6618 def testYutaka(self):
6619 """ 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...
6620 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6622 m=MEDCouplingCMesh()
6623 arr=DataArrayDouble(4) ; arr.iota()
6624 m.setCoords(arr,arr,arr)
6625 m=m.buildUnstructured()
6628 m=m.buildUnstructured()
6629 m1=m.buildDescendingConnectivity()[0]
6635 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6637 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6639 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6641 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6642 mm.addGroup(-1,grp3)
6643 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6644 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6645 mm.addNodeGroup(grp4)
6646 mm.rearrangeFamilies()
6647 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6648 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6649 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6650 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6651 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6653 for grp in [grp0,grp1,grp2,grp3,grp4]:
6654 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6659 def testContxtMger1TS(self):
6660 fname="Pyfile119.med"
6661 coo=DataArrayDouble(1000) ; coo.iota()
6662 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6664 WriteMesh(fname,m,True)
6665 f=MEDCouplingFieldDouble(ON_CELLS)
6668 arr=DataArrayDouble(m.getNumberOfCells())
6670 f.checkConsistencyLight()
6673 f.setTime(float(i),i,0)
6674 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6677 mm=MEDFileMesh.New(fname)
6678 fmts=MEDFileFieldMultiTS(fname,False)
6679 refSize=fmts.getHeapMemorySize()
6685 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6688 def testZipFamilies1(self):
6690 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6693 arr=DataArrayDouble(10) ; arr.iota()
6694 m=MEDCouplingCMesh()
6695 m.setCoords(arr,arr)
6696 m=m.buildUnstructured()
6701 for i in range(m.getNumberOfCells()):
6702 d = DataArrayInt([i])
6703 d.setName("grp%d"%i)
6707 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6708 grp_all.setName("grp_all")
6709 mm.addGroup(0,grp_all)
6710 for i in range(m.getNumberOfCells()):
6711 mm.removeGroup("grp{}".format(i))
6714 mm.zipFamilies() # the method to test
6716 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6717 self.assertEqual(len(mm.getFamiliesNames()),1)
6718 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6721 def testZipFamilies2(self):
6723 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6726 arr=DataArrayDouble(21) ; arr.iota()
6727 m=MEDCouplingCMesh()
6729 m=m.buildUnstructured()
6734 # 1 and 3 to be merged
6735 # 2 and 5 to be merged
6736 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6737 for i in range(1,9):
6738 mm.setFamilyId("Fam_{}".format(i),-i)
6739 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6740 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6741 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6743 grp0=DataArrayInt([0,1,3,8,10,19])
6744 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6745 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6746 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6747 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6748 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6749 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6751 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6752 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6753 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6754 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6755 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6758 def testMeshConvertFromMEDFileGeoType(self):
6759 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6762 def testFieldInt64_0(self):
6764 Small basic test with I/O of field in int64.
6766 fname="Pyfile120.med"
6767 arr = DataArrayDouble([0,1])
6768 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6769 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6770 v = 1234567890123456
6771 f.setArray(DataArrayInt64([v]))
6775 f1ts = MEDFileInt64Field1TS()
6776 f1ts.setFieldNoProfileSBT(f)
6777 fmts = MEDFileInt64FieldMultiTS()
6778 fmts.pushBackTimeStep(f1ts)
6779 fs = MEDFileFields()
6784 mm = MEDFileMesh.New(fname)
6785 fs = MEDFileFields(fname)
6786 f = fs[0][0].field(mm)
6787 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6788 self.assertEqual( f.getArray().getIJ(0,0) , v )
6791 def testNonRegUMeshSubParts(self):
6793 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6795 fname = "Pyfile121.med"
6796 m0 = MEDCouplingUMesh("mesh",1)
6797 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6798 m0.setCoords(coords)
6800 m0.insertNextCell(NORM_SEG2,[1,2])
6803 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6804 m1.setCoords(m0.getCoords())
6805 m1.setNodalConnectivity(DataArrayInt([1,2]))
6806 m1.setName(m0.getName())
6808 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6809 mm.zipCoords() # <- This call changes the coords and connectivity
6812 mm = MEDFileMesh.New(fname)
6813 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6814 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6819 if __name__ == "__main__":