1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2022 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author : Anthony Geay (EDF R&D)
22 from MEDLoader import *
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
31 if sys.version_info.major < 3:
32 import cPickle as pickle
36 class StdOutRedirect(object):
37 def __init__(self,fileName):
40 self.stdoutOld=os.dup(2)
41 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42 fd2=os.dup2(self.fdOfSinkFile,2)
43 self.origPyVal=sys.stderr
44 class FlushFile(object):
53 return self.f.isatty()
57 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
61 sys.stderr=self.origPyVal
63 os.dup2(self.stdoutOld,2)
64 os.close(self.stdoutOld)
66 class MEDLoaderTest3(unittest.TestCase):
68 def testMEDMesh1(self):
69 GeneratePyfile18(self)
70 fileName="Pyfile18.med"
71 mname="ExampleOfMultiDimW"
72 medmesh=MEDFileMesh.New(fileName,mname)
73 self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75 m1_0=medmesh.getLevel0Mesh(True)
76 m1_1=ReadUMeshFromFile(fileName,mname,0)
77 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78 m2_0=medmesh.getLevelM1Mesh(True)
79 m2_1=ReadUMeshFromFile(fileName,mname,-1)
80 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
84 def testMEDMesh2(self):
85 GeneratePyfile10(self)
86 fileName="Pyfile10.med"
88 outFileName="MEDFileMesh1.med"
89 medmesh=MEDFileUMesh.New(fileName,mname)
90 self.assertEqual((0,),medmesh.getNonEmptyLevels())
91 m1_0=medmesh.getLevel0Mesh(True)
92 m1_1=ReadUMeshFromFile(fileName,mname,0)
93 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94 g1_0=medmesh.getGroup(0,"mesh2",True)
95 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97 g1_0=medmesh.getGroup(0,"mesh3",True)
98 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102 g1_1.setName(g1_0.getName())
103 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104 g1_0=medmesh.getFamily(0,"Family_-3",True)
105 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107 g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109 g1_1.setName(g1_0.getName())
110 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112 medmesh.write(outFileName,2);
113 self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114 self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115 self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116 self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117 famn=medmesh.getFamilyNameGivenId(0)
118 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
120 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
127 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
129 def testMEDMesh3(self):
130 outFileName="MEDFileMesh3.med"
131 c=DataArrayDouble.New()
132 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134 c.setValues(coords,9,2)
135 m=MEDCouplingUMesh.New();
136 m.setMeshDimension(2);
138 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143 m.finishInsertingCells();
145 m.checkConsistencyLight()
146 m1=MEDCouplingUMesh.New();
147 m1.setMeshDimension(1);
149 m1.insertNextCell(NORM_SEG2,2,[1,4])
150 m1.insertNextCell(NORM_SEG2,2,[3,6])
151 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152 m1.finishInsertingCells();
154 m1.checkConsistencyLight()
155 m2=MEDCouplingUMesh.New();
156 m2.setMeshDimension(0);
158 m2.insertNextCell(NORM_POINT1,1,[1])
159 m2.insertNextCell(NORM_POINT1,1,[3])
160 m2.insertNextCell(NORM_POINT1,1,[2])
161 m2.insertNextCell(NORM_POINT1,1,[6])
162 m2.finishInsertingCells();
164 m2.checkConsistencyLight()
166 mm=MEDFileUMesh.New()
167 self.assertTrue(mm.getUnivNameWrStatus())
168 mm.setName("MyFirstMEDCouplingMEDmesh")
169 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
171 mm.setMeshAtLevel(-1,m1);
172 mm.setMeshAtLevel(0,m);
173 mm.setMeshAtLevel(-2,m2);
174 # playing with groups
175 g1_2=DataArrayInt.New()
176 g1_2.setValues([1,3],2,1)
178 g2_2=DataArrayInt.New()
179 g2_2.setValues([1,2,3],3,1)
181 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182 g1_1=DataArrayInt.New()
183 g1_1.setValues([0,1,2],3,1)
185 g2_1=DataArrayInt.New()
186 g2_1.setValues([0,2],2,1)
188 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189 g1_N=DataArrayInt.New()
190 g1_N.setValues(list(range(8)),8,1)
192 g2_N=DataArrayInt.New()
193 g2_N.setValues(list(range(9)),9,1)
195 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196 mm.createGroupOnAll(0,"GrpOnAllCell")
197 # check content of mm
198 t=mm.getGroupArr(0,"G1",False)
199 self.assertTrue(g1_2.isEqual(t));
200 t=mm.getGroupArr(0,"G2",False)
201 self.assertTrue(g2_2.isEqual(t));
202 t=mm.getGroupArr(-1,"G1",False)
203 self.assertTrue(g1_1.isEqual(t));
204 t=mm.getGroupArr(-1,"G2",False)
205 self.assertTrue(g2_1.isEqual(t));
206 t=mm.getGroupArr(1,"G1",False)
207 self.assertTrue(g1_N.isEqual(t));
208 t=mm.getGroupArr(1,"G2",False)
209 self.assertTrue(g2_N.isEqual(t));
210 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211 t=mm.getGroupArr(0,"GrpOnAllCell")
212 self.assertTrue(t.getValues()==list(range(5)))
215 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216 mmCpy.write(outFileName,2);
218 mm=MEDFileMesh.New(outFileName)
220 self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221 self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222 self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223 mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224 self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225 self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226 self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227 lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228 self.assertEqual(3,len(lmm))
229 self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230 self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231 self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
233 self.assertTrue(mm.getUnivNameWrStatus())
234 self.assertTrue(isinstance(mm.getUnivName(),str))
235 self.assertTrue(len(mm.getUnivName())!=0)
236 mbis=mm.getMeshAtLevel(0)
237 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238 self.assertTrue(m.isEqual(mbis,1e-12));
240 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
243 # this test is the testMEDMesh3 except that permutation is dealed here
245 def testMEDMesh4(self):
246 outFileName="MEDFileMesh4.med"
247 c=DataArrayDouble.New()
248 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250 c.setValues(coords,9,2)
251 c.setInfoOnComponent(0,"abcdef [km]")
252 c.setInfoOnComponent(1,"ghij [MW]")
253 m=MEDCouplingUMesh.New();
254 m.setMeshDimension(2);
256 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261 m.finishInsertingCells();
263 m.checkConsistencyLight()
264 m1=MEDCouplingUMesh.New();
265 m1.setMeshDimension(1);
267 m1.insertNextCell(NORM_SEG2,2,[1,4])
268 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269 m1.insertNextCell(NORM_SEG2,2,[3,6])
270 m1.finishInsertingCells();
272 m1.checkConsistencyLight()
273 m2=MEDCouplingUMesh.New();
274 m2.setMeshDimension(0);
276 m2.insertNextCell(NORM_POINT1,1,[1])
277 m2.insertNextCell(NORM_POINT1,1,[3])
278 m2.insertNextCell(NORM_POINT1,1,[2])
279 m2.insertNextCell(NORM_POINT1,1,[6])
280 m2.finishInsertingCells();
282 m2.checkConsistencyLight()
284 mm=MEDFileUMesh.New()
285 mm.setName("My2ndMEDCouplingMEDmesh")
286 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
288 renumNode=DataArrayInt.New()
289 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290 mm.setRenumFieldArr(1,renumNode)
292 mm.setMeshAtLevel(-1,m1,True);
293 mm.setMeshAtLevel(0,m,True);
294 mm.setMeshAtLevel(-2,m2,True);
295 mm.removeMeshAtLevel(-2)
296 mm.setMeshAtLevel(-2,m2,True);
297 # playing with groups
298 g1_2=DataArrayInt.New()
299 g1_2.setValues([2,3],2,1)
301 g2_2=DataArrayInt.New()
302 g2_2.setValues([2,0,3],3,1)
304 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305 g1_1=DataArrayInt.New()
306 g1_1.setValues([0,2,1],3,1)
308 g2_1=DataArrayInt.New()
309 g2_1.setValues([0,2],2,1)
311 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312 g1_N=DataArrayInt.New()
313 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
315 g2_N=DataArrayInt.New()
316 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
318 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319 # check content of mm
320 t=mm.getGroupArr(0,"G1",True)
321 self.assertTrue(g1_2.isEqual(t));
322 t=mm.getGroupArr(0,"G2",True)
323 self.assertTrue(g2_2.isEqual(t));
324 t=mm.getGroupArr(-1,"G1",True)
325 self.assertTrue(g1_1.isEqual(t));
326 t=mm.getGroupArr(-1,"G2",True)
327 self.assertTrue(g2_1.isEqual(t));
328 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
330 mm.write(outFileName,2);
331 mm2=MEDFileMesh.New(outFileName)
332 res=mm.isEqual(mm2,1e-12)
333 self.assertTrue(res[0])
334 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336 mm2.keepFamIdsOnlyOnLevs([3],[-1])
337 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
340 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
343 self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345 self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346 self.assertTrue(not mm2.existsFamily("Family_-8"))
347 mm2.createGroupOnAll(-1,"GrpOnAllFace")
348 self.assertTrue(mm2.existsFamily("Family_-8"))
349 self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
352 #testing persistence of retrieved arrays
354 def testMEDMesh5(self):
355 GeneratePyfile18(self)
356 fileName="Pyfile18.med"
357 mname="ExampleOfMultiDimW"
358 medmesh=MEDFileUMesh.New(fileName,mname)
359 m1_0=medmesh.getLevel0Mesh(True)
360 da1=medmesh.getFamilyFieldAtLevel(0)
362 self.assertEqual(20,m1_0.getNumberOfCells())
363 self.assertEqual(20,da1.getNumberOfTuples())
366 def internalMEDMesh6(self):
367 outFileName="MEDFileMesh5.med"
370 m1=MEDCouplingCMesh.New();
371 da=DataArrayDouble.New()
372 da.setValues([0.,1.,2.],3,1)
373 da.setInfoOnComponent(0,"XX [mm]")
375 da=DataArrayDouble.New()
376 da.setValues([0.,1.2],2,1)
377 da.setInfoOnComponent(0,"YY [km]")
379 da=DataArrayDouble.New()
380 da.setValues([0.,1.3],2,1)
381 da.setInfoOnComponent(0,"ZZ [um]")
384 self.assertTrue(m[0].isEqual(m1,1e-12))
385 self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386 m.setName("myFirstCartMesh")
387 m.setDescription("mmmmpppppppp")
390 da=DataArrayInt.New()
391 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392 m.setFamilyFieldArr(1,da)
393 m.setFamilyId("family1",1)
394 da=m.getFamilyArr(1,"family1")
396 self.assertEqual(expected1,da.getValues())
397 self.assertTrue(m.getUnivNameWrStatus())
398 m.write(outFileName,2);
399 mm=MEDFileMesh.New(outFileName)
400 self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401 self.assertTrue(isinstance(mm,MEDFileCMesh))
402 self.assertTrue(isinstance(mm.getUnivName(),str))
403 self.assertTrue(len(mm.getUnivName())!=0)
404 self.assertTrue(m.isEqual(mm,1e-12)[0])
405 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
408 m1.setTime(tt[2],tt[0],tt[1])
409 m1.setName(m.getName())
410 m1.setTimeUnit(m.getTimeUnit())
411 m1.setDescription(m.getDescription())
412 self.assertTrue(m2.isEqual(m1,1e-12));
415 def testMEDMesh6(self):
416 self.internalMEDMesh6()
420 def testMEDMesh7(self):
421 fileName="Pyfile24.med"
422 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
424 m.setCoords(m2.getCoords())
425 m.setMeshAtLevel(0,m2)
426 m.setMeshAtLevel(-1,m1)
427 m.setMeshAtLevel(-2,m0)
428 m.setFamilyFieldArr(0,f2)
429 m.setFamilyFieldArr(-1,f1)
430 m.setFamilyFieldArr(-2,f0)
431 m.setFamilyFieldArr(1,p)
432 m.setRenumFieldArr(0,n2)
433 m.setRenumFieldArr(-1,n1)
434 m.setRenumFieldArr(-2,n0)
436 for i in range(nbOfFams):
437 m.addFamily(fns[i],fids[i])
440 for i in range(nbOfGrps):
441 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
443 m.setName(m2.getName())
444 m.setDescription(m2.getDescription())
446 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
457 self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
460 def funcToTestDelItem(self,ff):
464 #emulation of pointe.med file.
466 def testMEDField1(self):
467 TestMultiFieldShuffleRW1(self)
468 mm=MEDFileMesh.New("Pyfile17.med")
469 mm.write("Pyfile17_bis.med",2)
470 ff=MEDFileFieldMultiTS("Pyfile17.med")
471 tsExpected=[[1,2],[3,4],[5,6]]
472 self.assertEqual(3,len(ff))
473 for pos,f1ts in enumerate(ff):
474 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475 self.assertEqual(type(f1ts),MEDFileField1TS)
477 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478 self.assertEqual([3,4],ff[1].getTime()[:-1])
479 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481 ff.write("Pyfile17_bis.med",0)
483 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484 self.assertEqual([(1,2),(3,4),(5,6)],ts)
485 self.funcToTestDelItem(ff)
486 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487 self.assertEqual([(1,2)],ts)
492 def testMEDField2(self):
493 GeneratePyfile19(self)
494 mm=MEDFileMesh.New("Pyfile19.med")
495 mm.write("Pyfile19_bis.med",2)
496 ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497 ff.write("Pyfile19_bis.med",0)
498 self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
503 def testMEDField3(self):
504 GeneratePyfile13(self)
505 mm=MEDFileMesh.New("Pyfile13.med")
506 mm.write("Pyfile13_bis.med",2)
507 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508 ff.write("Pyfile13_bis.med",0)
509 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511 f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513 ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514 f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516 ff4=MEDFileField1TS.New("Pyfile13.med")
517 f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518 self.assertTrue(f.isEqual(f4,1e-12,1e-12))
523 def testMEDField4(self):
524 GeneratePyfile14(self)
525 mm=MEDFileMesh.New("Pyfile14.med")
526 mm.write("Pyfile14_bis.med",2)
527 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528 ff.write("Pyfile14_bis.med",0)
529 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531 f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
535 # MEDField get/set on pointe.med
537 def testMEDField5(self):
538 TestMultiFieldShuffleRW1(self)
539 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540 f=ff.getFieldAtLevel(ON_CELLS,0)
541 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546 # no with renumbering
547 f=ff.getFieldAtLevel(ON_CELLS,0,1)
548 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550 f=ff.getFieldAtLevel(ON_CELLS,0,3)
551 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552 f=ff.getFieldAtLevel(ON_CELLS,0,2)
553 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
558 # MEDField get/set on profiles nodes
560 def testMEDField6(self):
561 GeneratePyfile7(self)
562 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563 its=ff.getIterations()
564 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566 f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568 GeneratePyfile19(self)
569 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570 its=ff.getIterations()
571 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572 f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
578 # MEDField get/set on profiles cells
580 def testMEDField7(self):
581 GeneratePyfile12(self)
582 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583 its=ff.getIterations()
584 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585 f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
589 #first test of assignation. No profile and types sorted by type.
591 def testMEDField8(self):
593 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
595 mm1=MEDFileUMesh.New()
596 mm1.setCoords(m1.getCoords())
597 mm1.setMeshAtLevel(0,m1)
598 mm1.setName(m1.getName())
600 ff1=MEDFileField1TS.New()
601 ff1.setFieldNoProfileSBT(f1)
603 f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604 itt,orr,ti=ff1.getTime()
605 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
608 itt,orr,ti=ff1.getTime()
609 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
611 ff1.copyTimeInfoFrom(f1)
612 itt,orr,ti=ff1.getTime()
613 self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614 da,infos=ff1.getUndergroundDataArrayExt()
615 f2.getArray().setName(da.getName())#da has the same name than f2
616 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
620 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
622 mm1=MEDFileUMesh.New()
623 mm1.setCoords(m1.getCoords())
624 mm1.setMeshAtLevel(0,m1)
625 mm1.setName(m1.getName())
627 ff1=MEDFileField1TS.New()
628 ff1.setFieldNoProfileSBT(f1)
630 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
632 f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634 f1.getArray().setIJ(0,0,nv)
635 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
638 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
640 mm1=MEDFileUMesh.New()
641 mm1.setCoords(m1.getCoords())
642 mm1.setMeshAtLevel(0,m1)
643 mm1.setName(m1.getName())
645 ff1=MEDFileField1TS.New()
646 ff1.setFieldNoProfileSBT(f1)
648 f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650 da,infos=ff1.getUndergroundDataArrayExt()
651 f2.getArray().setName(da.getName())#da has the same name than f2
652 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
656 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657 f1InvalidCpy=f1.deepCopy()
658 f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659 f1InvalidCpy2=f1.deepCopy()
660 f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
662 mm1=MEDFileUMesh.New()
663 mm1.setCoords(m1.getCoords())
664 mm1.setMeshAtLevel(0,m1)
665 mm1.setName(m1.getName())
667 ff1=MEDFileField1TS.New()
668 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669 f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671 ff1.setFieldNoProfileSBT(f1)
673 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676 sbt=ff2.getFieldSplitedByType2()
677 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680 self.assertEqual(6,loc1.getNumberOfPointsInCells())
681 self.assertEqual(3,loc1.getNumberOfGaussPoints())
682 self.assertEqual(2,loc1.getDimension())
683 da,infos=ff2.getUndergroundDataArrayExt()
684 f2.getArray().setName(da.getName())#da has the same name than f2
685 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686 self.assertEqual(53,da.getNumberOfTuples())
687 self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
692 def testMEDFileData1(self):
696 m1=MEDLoaderDataForTest.build1DMesh_1()
697 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698 mmm1=MEDFileMeshMultiTS.New() ;
699 mmm1.setOneTimeStep(mm1)
700 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
705 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706 self.assertEqual(name,mmm.getName())
707 self.assertEqual(type(mmm),MEDFileUMesh)
709 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
711 ff1=MEDFileFieldMultiTS.New()
712 ff21=MEDFileFieldMultiTS.New()
713 ff22=MEDFileFieldMultiTS.New()
714 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715 f1.getArray().setInfoOnComponent(0,"power [kW]")
716 ff1.appendFieldNoProfileSBT(f1)
717 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719 ff21.appendFieldNoProfileSBT(f21)
720 f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723 ff22.appendFieldNoProfileSBT(f22)
724 fs=MEDFileFields.New()
725 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726 for name,fmts in zip(["f1","f21","f22"],fs):
727 self.assertEqual(name,fmts.getName())
731 fname2="Pyfile29_2.med"
734 d2=MEDFileData.New(fname2)
735 self.assertEqual(2,d2.getNumberOfMeshes())
736 self.assertEqual(3,d2.getNumberOfFields())
737 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741 self.assertTrue(m1.isEqual(m1bis,1e-12))
742 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
750 def testMEDField9(self):
751 # first test field profile WR. Full type but with some type missing
753 m1=MEDLoaderDataForTest.build2DMesh_3()
754 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
756 ff1=MEDFileField1TS.New()
757 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
762 ff1.setFieldProfile(f1,mm1,0,da)
763 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
767 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769 self.assertTrue(vals.isEqual(d,1e-14))
771 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773 ff2.deepCpyGlobs(ff3)
774 sbt=ff2.getFieldSplitedByType2()
775 self.assertEqual(3,sbt[0][0])#TRI3
776 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779 self.assertEqual(4,sbt[1][0])#QUAD4
780 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786 self.assertTrue(vals.isEqual(d,1e-14))
790 def testMEDField10(self):
792 m1=MEDLoaderDataForTest.build2DMesh_1()
793 m1.renumberCells([0,1,4,2,3,5],False)
794 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
796 ff1=MEDFileFieldMultiTS.New()
797 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
802 ff1.appendFieldProfile(f1,mm1,0,da)
803 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804 ff1.appendFieldProfile(f1,mm1,0,da)
808 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810 self.assertTrue(vals.isEqual(e,1e-14))
811 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813 self.assertTrue(vals.isEqual(d,1e-14))
815 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819 self.assertTrue(vals.isEqual(e,1e-14))
820 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822 self.assertTrue(vals.isEqual(d,1e-14))
825 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
827 def testMEDField11(self):
829 m1=MEDLoaderDataForTest.build2DMesh_1()
830 m1.renumberCells([0,1,4,2,3,5],False)
831 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
833 ff1=MEDFileField1TS.New()
834 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
839 ff1.setFieldProfile(f1,mm1,0,da)
840 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
843 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845 self.assertTrue(vals.isEqual(d,1e-14))
847 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850 self.assertTrue(vals.isEqual(d,1e-14))
854 def testMEDField12(self):
856 m1=MEDLoaderDataForTest.build2DMesh_1()
857 m1.renumberCells([0,1,4,2,3,5],False)
858 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
860 ff1=MEDFileFieldMultiTS.New()
861 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
866 ff1.appendFieldProfile(f1,mm1,0,da)
867 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868 ff1.appendFieldProfile(f1,mm1,0,da)
871 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873 self.assertTrue(vals.isEqual(e,1e-14))
874 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876 self.assertTrue(vals.isEqual(d,1e-14))
878 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881 self.assertTrue(vals.isEqual(e,1e-14))
882 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884 self.assertTrue(vals.isEqual(d,1e-14))
888 def testMEDField13(self):
890 m1=MEDLoaderDataForTest.build2DMesh_1()
891 m1.renumberCells([0,1,4,2,3,5],False)
893 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
896 ff1=MEDFileField1TS.New()
897 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
902 ff1.setFieldProfile(f1,mm1,0,da)
905 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907 self.assertTrue(vals.isEqual(d,1e-14))
909 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912 self.assertTrue(vals.isEqual(d,1e-14))
916 def testMEDField14(self):
918 m1=MEDLoaderDataForTest.build2DMesh_1()
919 m1.renumberCells([0,1,4,2,3,5],False)
921 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
924 ff1=MEDFileFieldMultiTS.New()
925 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
930 ff1.appendFieldProfile(f1,mm1,0,da)
931 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932 ff1.appendFieldProfile(f1,mm1,0,da)
935 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937 self.assertTrue(vals.isEqual(d,1e-14))
938 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940 self.assertTrue(vals.isEqual(e,1e-14))
941 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
943 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946 self.assertTrue(vals.isEqual(d,1e-14))
947 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949 self.assertTrue(vals.isEqual(e,1e-14))
951 # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952 # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953 # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
955 def testMEDField15(self):
957 m0=MEDLoaderDataForTest.build2DMesh_1()
958 m0.renumberCells([0,1,4,2,3,5],False)
960 m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962 ff1=MEDFileField1TS.New()
963 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
968 ff1.setFieldProfile(f1,mm1,0,da)
969 m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
972 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974 self.assertTrue(p1.isIota(5))
975 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
977 # Test for getFieldAtTopLevel method
979 def testMEDField16(self):
981 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
983 mm1=MEDFileUMesh.New()
984 mm1.setCoords(m1.getCoords())
985 mm1.setMeshAtLevel(0,m1)
986 mm1.setName(m1.getName())
987 ff1=MEDFileField1TS.New()
988 ff1.setFieldNoProfileSBT(f1)
989 m2=m1.buildDescendingConnectivity()[0]
990 m2.sortCellsInMEDFileFrmt()
991 m2.setName(m1.getName())
992 mm1.setMeshAtLevel(-1,m2)
994 f2=m2.getMeasureField(True)
995 dd=DataArrayDouble.New()
996 dd.alloc(f2.getArray().getNumberOfTuples(),3)
997 dd[:,0]=f2.getArray()
998 dd[:,1]=2*f2.getArray()
999 dd[:,2]=3*f2.getArray()
1000 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1002 f2.copyTinyStringsFrom(f1)
1003 f2.copyTinyAttrFrom(f1)
1004 ff1.setFieldNoProfileSBT(f2)
1006 # Reading Pyfile37.med
1007 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1015 fname="Pyfile38.med"
1017 ff1=MEDFileField1TS.New()
1018 ff1.setFieldNoProfileSBT(f2)
1020 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1025 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1027 def testMEDField17(self):
1028 fname="Pyfile39.med"
1029 m1=MEDLoaderDataForTest.build2DMesh_1()
1030 m1.renumberCells([0,1,4,2,3,5],False)
1031 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1033 ffs=MEDFileFields.New()
1034 ff1=MEDFileFieldMultiTS.New()
1035 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1040 ff1.appendFieldProfile(f1,mm1,0,da)
1041 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042 ff1.appendFieldProfile(f1,mm1,0,da)
1044 ffs.setFieldAtPos(0,ff1)
1048 ffsr=MEDFileFields.New(fname)
1049 ff3=ffsr.getFieldAtPos(0)
1050 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1054 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1056 def testMEDField18(self):
1057 fname="Pyfile40.med"
1058 m1=MEDLoaderDataForTest.build2DMesh_1()
1059 m1.renumberCells([0,1,4,2,3,5],False)
1060 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1062 ffs=MEDFileFields.New()
1063 ff1=MEDFileFieldMultiTS.New()
1064 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1069 ff1.appendFieldProfile(f1,mm1,0,da)
1070 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071 ff1.appendFieldProfile(f1,mm1,0,da)
1075 ffsr=MEDFileFields.New(fname)
1076 ff3=ffsr.getFieldAtPos(0)
1077 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1082 def testMEDFieldBug1(self):
1083 GeneratePyfile13(self)
1084 fname="Pyfile13.med"
1085 d=MEDFileData.New(fname)
1086 self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1090 def testMEDMesh8(self):
1091 m=MEDLoaderDataForTest.build1DMesh_1()
1092 m.convertQuadraticCellsToLinear()
1093 mm=MEDFileUMesh.New()
1094 mm.setMeshAtLevel(0,m)
1095 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098 mm.setGroupsAtLevel(0,[g1,g2],False)
1099 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100 self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101 self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102 self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103 mm.assignFamilyNameWithGroupName()
1104 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1109 mm=MEDFileUMesh.New()
1110 mm.setMeshAtLevel(0,m)
1111 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123 mm.changeFamilyId(5,6)
1124 g=mm.getGroupArr(0,"g3")
1125 self.assertTrue(g.isEqual(g3));
1126 g=mm.getGroupArr(0,"g2")
1127 self.assertTrue(g.isEqual(g2));
1128 g=mm.getGroupArr(0,"g1")
1129 self.assertTrue(g.isEqual(g1));
1132 # bug detected by gauthier
1134 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135 fname="Pyfile41.med"
1136 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1138 mm1=MEDFileUMesh.New()
1139 mm1.setCoords(m1.getCoords())
1140 mm1.setMeshAtLevel(0,m1)
1142 ff1=MEDFileField1TS.New()
1143 ff1.setFieldNoProfileSBT(f1)
1145 # writing mesh1 and field1, now creation of mesh2 and field2
1148 m2.translate([0.5,0.6,0.7])
1149 m2.setName("3DSurfMesh_2")
1150 f2.getArray()[:]*=2.
1151 f2.setName("VectorFieldOnCells2")
1152 mm2=MEDFileUMesh.New()
1153 mm2.setCoords(m2.getCoords())
1154 mm2.setMeshAtLevel(0,m2)
1156 ff2=MEDFileField1TS.New()
1157 ff2.setFieldNoProfileSBT(f2)
1160 f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162 f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1167 def testMEDLoaderMultiLevelCellField1(self):
1168 fname="Pyfile42.med"
1169 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170 m=MEDFileUMesh.New()
1171 m.setCoords(m2.getCoords())
1172 m.setMeshAtLevel(0,m2)
1173 m.setMeshAtLevel(-1,m1)
1174 m.setMeshAtLevel(-2,m0)
1178 compNames1=["comp1","comp2","comp3"]
1179 ff1=MEDFileField1TS.New()
1180 da2=DataArrayDouble.New()
1181 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1183 da2.rearrange(len(compNames1))
1184 da2.setInfoOnComponents(compNames1)
1185 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186 ff1.setFieldNoProfileSBT(f2)
1187 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188 da0=DataArrayDouble.New()
1189 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1191 da0.rearrange(len(compNames1))
1192 da0.setInfoOnComponents(compNames1)
1193 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194 ff1.setFieldNoProfileSBT(f0)
1195 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196 da1=DataArrayDouble.New()
1197 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1199 da1.rearrange(len(compNames1))
1200 da1.setInfoOnComponents(compNames1)
1201 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202 ff1.setFieldNoProfileSBT(f1)
1203 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1208 compNames2=["comp11","comp22"]
1209 ff2=MEDFileField1TS.New()
1210 da0=DataArrayDouble.New()
1211 da0.alloc(m0.getNumberOfCells()*2,1)
1214 da0.setInfoOnComponents(compNames2)
1215 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216 ff2.setFieldNoProfileSBT(f0)
1217 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218 da1=DataArrayDouble.New()
1219 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1221 da1.rearrange(len(compNames2))
1222 da1.setInfoOnComponents(compNames2)
1223 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224 ff2.setFieldNoProfileSBT(f1)
1225 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1229 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1238 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239 fname="Pyfile43.med"
1240 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241 m=MEDFileUMesh.New()
1242 m.setMeshAtLevel(0,m2)
1243 m.setMeshAtLevel(-1,m1)
1244 m.setMeshAtLevel(-2,m0)
1245 f=MEDFileField1TS.New()
1246 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247 ff.setName("NodeFieldPfl")
1248 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1250 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251 f.setFieldProfile(ff,m,-2,pfl)
1252 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261 expected1=[1.,10.,100.,2.,20.,200.]
1262 nodeCoordsWithValue1=[10.,2.5,0.]
1263 nodeCoordsWithValue2=[10.,3.75,0.]
1265 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1269 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1273 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1283 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1288 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289 f=MEDFileField1TS.New()
1290 f.setFieldProfile(ff,m,-2,pfl)
1291 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300 expected2=[2.,20.,200.,1.,10.,100.]
1302 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1306 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1309 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1319 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1324 def testBuildInnerBoundaryAlongM1Group1(self):
1325 fname="Pyfile44.med"
1326 m=MEDCouplingCMesh.New()
1327 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332 m2.setName(m.getName())
1333 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335 mm=MEDFileUMesh.New()
1336 mm.setMeshAtLevel(0,m)
1337 mm.setMeshAtLevel(-1,m2)
1338 mm.setGroupsAtLevel(-1,[grp,grp2])
1339 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340 mm.setGroupsAtLevel(1,[grpNode])
1341 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1345 self.assertEqual(30,mm.getNumberOfNodes())
1346 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1349 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350 self.assertEqual([15,16,17],nodes.getValues());
1351 self.assertEqual([7,8,9],cells.getValues());
1352 self.assertEqual([12,13,14],cells2.getValues());
1353 self.assertEqual(33,mm.getNumberOfNodes())
1354 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1366 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1375 def testBuildInnerBoundaryAlongM1Group2(self):
1376 fname="Pyfile45.med"
1377 m=MEDCouplingCMesh.New()
1378 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383 m2.setName(m.getName())
1384 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386 mm=MEDFileUMesh.New()
1387 mm.setMeshAtLevel(0,m)
1388 mm.setMeshAtLevel(-1,m2)
1389 mm.setGroupsAtLevel(-1,[grp,grp2])
1390 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391 mm.setGroupsAtLevel(1,[grpNode])
1392 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393 ref1=[4,9,8,14,15,4,10,9,15,16]
1394 ref2=[4,9,8,14,30,4,10,9,30,16]
1396 self.assertEqual(30,mm.getNumberOfNodes())
1397 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1400 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401 self.assertEqual([15],nodes.getValues());
1402 self.assertEqual([7,8],cells.getValues());
1403 self.assertEqual([12,13],cells2.getValues());
1404 self.assertEqual(31,mm.getNumberOfNodes())
1405 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1417 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1426 def testBuildInnerBoundaryAlongM1Group3(self):
1427 """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428 fname = "Pyfile73.med"
1429 m = MEDCouplingCMesh.New()
1430 m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431 m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432 m = m.buildUnstructured(); m.setName("simple")
1433 m2 = m.buildDescendingConnectivity()[0]
1434 m2.setName(m.getName())
1436 # A crack in two non connected parts of the mesh:
1437 grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1439 mm = MEDFileUMesh.New()
1440 mm.setMeshAtLevel(0,m)
1441 mm.setMeshAtLevel(-1,m2)
1442 mm.setGroupsAtLevel(-1,[grpSeg])
1443 nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444 self.assertEqual([1,13],nodes.getValues());
1445 self.assertEqual([0,6],cellsMod.getValues());
1446 self.assertEqual([1,7],cellsNotMod.getValues());
1447 self.assertEqual(17,mm.getNumberOfNodes())
1448 self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449 self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450 ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451 ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1457 refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459 self.assertTrue(delta.getMaxValue()[0]<1e-10)
1461 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463 refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1465 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1469 def testBuildInnerBoundaryAlongM1Group4(self):
1470 """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1472 coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473 0.,1., 1.,1., 2.,1., 3.,1.,
1474 0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475 conn = [3,0,4,1, 3,1,4,5,
1482 connI = DataArrayInt()
1483 connI.alloc(13, 1); connI.iota(); connI *= 4
1484 m2 = MEDCouplingUMesh("2D", 2)
1486 m2.setConnectivity(DataArrayInt(conn), connI)
1487 m2.checkConsistency()
1488 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489 grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490 grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491 mfu = MEDFileUMesh()
1492 mfu.setMeshAtLevel(0, m2)
1493 mfu.setMeshAtLevel(-1, m1)
1494 mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495 nNod = m2.getNumberOfNodes()
1496 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497 m2_bis = mfu.getMeshAtLevel(0)
1498 m2_bis.checkConsistency()
1499 m1_bis = mfu.getMeshAtLevel(-1)
1500 m1_bis.checkConsistency()
1501 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504 self.assertEqual([6,7], nodesDup.getValues())
1505 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506 self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507 self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508 self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509 self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510 self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511 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 testBuildInnerBoundary6(self):
1584 """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1585 The singular point was wrongly duplicated.
1587 coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1588 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1589 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1590 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1591 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1592 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1593 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1594 c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1595 18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1596 28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1597 cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1598 m3 = MEDCouplingUMesh("3D", 3)
1600 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1601 m3.checkConsistency()
1602 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1603 grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1604 mfu = MEDFileUMesh()
1605 mfu.setMeshAtLevel(0, m3)
1606 mfu.setMeshAtLevel(-1, m2)
1607 mfu.setGroupsAtLevel(-1, [grpIds])
1608 nNod = m3.getNumberOfNodes()
1609 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1610 m3_bis = mfu.getMeshAtLevel(0)
1611 m3_bis.checkConsistency()
1612 m2_bis = mfu.getMeshAtLevel(-1)
1613 m2_bis.checkConsistency()
1614 self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1615 self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1616 self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1617 self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1618 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1619 self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1620 self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1621 self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1622 self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1623 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1624 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1628 def testBuildInnerBoundary7(self):
1629 """ 3D test where the crack has another funny shape with another singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1630 Once the crack is inserted, the cells on either side of the crack do not necessarily form a connex spread zone. This was not properly handled either.
1632 m3 = MEDCouplingUMesh('box', 3)
1633 coo = DataArrayDouble([(5,17,0),(0,17,0),(0,12,0),(5,12,0),(15,17,0),(15,12,0),(20,12,0),(20,17,0),(20,2,0),(15,2,0),(15,-3,0),(20,-3,0),(5,-3,0),(5,2,0),(0,-3,0),(0,2,0),(5,17,10),(5,17,20),(5,17,30),(5,17,40),(0,17,10),(0,17,20),(0,17,30),(0,17,40),(0,12,10),(0,12,20),(0,12,30),(0,12,40),(5,12,10),(5,12,20),(5,12,30),(5,12,40),(15,17,10),(15,17,20),(15,17,30),(15,17,40),(15,12,10),(15,12,20),(15,12,30),(15,12,40),(20,12,10),(20,12,20),(20,12,30),(20,12,40),(20,17,10),(20,17,20),(20,17,30),(20,17,40),(20,2,10),(20,2,20),(20,2,30),(20,2,40),(15,2,10),(15,2,20),(15,2,30),(15,2,40),(15,-3,10),(15,-3,20),(15,-3,30),(15,-3,40),(20,-3,10),(20,-3,20),(20,-3,30),(20,-3,40),
1634 (5,-3,10),(5,-3,20),(5,-3,30),(5,-3,40),(5,2,10),(5,2,20),(5,2,30),(5,2,40),(0,-3,10),(0,-3,20),(0,-3,30),(0,-3,40),(0,2,10),(0,2,20),(0,2,30),(0,2,40),(20,8,0),(0,8,0),(20,8,10),(20,8,20),(20,8,30),(20,8,40),(15,8,30),(15,8,40),(5,8,30),(5,8,40),(0,8,10),(0,8,20),(0,8,30),(0,8,40)])
1636 c = DataArrayInt([31, 0, 3, 2, 1, -1, 16, 20, 24, 28, -1, 0, 16, 28, 3, -1, 3, 28, 24, 2, -1, 2, 24, 20, 1, -1, 1, 20, 16, 0, 31, 16, 28, 24, 20, -1, 17, 21, 25, 29, -1, 16, 17, 29, 28, -1, 28, 29, 25, 24, -1, 24, 25, 21, 20, -1, 20, 21, 17, 16, 31, 17, 29, 25, 21, -1, 18, 22, 26, 30, -1, 17, 18, 30, 29, -1, 29, 30, 26, 25, -1, 25, 26, 22, 21, -1, 21, 22, 18, 17, 31, 18, 30, 26, 22, -1, 19, 23, 27, 31, -1, 18, 19, 31, 30, -1, 30, 31, 27, 26, -1, 26, 27, 23, 22, -1, 22, 23, 19, 18, 31, 4, 5, 3, 0, -1, 32, 16, 28, 36, -1, 4, 32, 36, 5, -1, 5, 36, 28, 3, -1, 3, 28, 16, 0, -1, 0, 16, 32, 4, 31, 32, 36, 28, 16, -1, 33, 17, 29, 37, -1, 32, 33, 37,
1637 36, -1, 36, 37, 29, 28, -1, 28, 29, 17, 16, -1, 16, 17, 33, 32, 31, 33, 37, 29, 17, -1, 34, 18, 30, 38, -1, 33, 34, 38, 37, -1, 37, 38, 30, 29, -1, 29, 30, 18, 17, -1, 17, 18, 34, 33, 31, 34, 38, 30, 18, -1, 35, 19, 31, 39, -1, 34, 35, 39, 38, -1, 38, 39, 31, 30, -1, 30, 31, 19, 18, -1, 18, 19, 35, 34, 31, 6, 5, 4, 7, -1, 40, 44, 32, 36, -1, 6, 40, 36, 5, -1, 5, 36, 32, 4, -1, 4, 32, 44, 7, -1, 7, 44, 40, 6, 31, 40, 36, 32, 44, -1, 41, 45, 33, 37, -1, 40, 41, 37, 36, -1, 36, 37, 33, 32, -1, 32, 33, 45, 44, -1, 44, 45, 41, 40, 31, 41, 37, 33, 45, -1, 42, 46, 34, 38, -1, 41, 42, 38, 37, -1, 37, 38, 34, 33, -1, 33, 34, 46, 45, -1, 45, 46, 42, 41, 31,
1638 42, 38, 34, 46, -1, 43, 47, 35, 39, -1, 42, 43, 39, 38, -1, 38, 39, 35, 34, -1, 34, 35, 47, 46, -1, 46, 47, 43, 42, 31, 80, 9, 5, 6, -1, 82, 40, 36, 52, -1, 80, 82, 52, 9, -1, 9, 52, 36, 5, -1, 5, 36, 40, 6, -1, 6, 40, 82, 80, 31, 82, 52, 36, 40, -1, 83, 41, 37, 53, -1, 82, 83, 53, 52, -1, 52, 53, 37, 36, -1, 36, 37, 41, 40, -1, 40, 41, 83, 82, 31, 83, 53, 37, 41, -1, 84, 42, 38, 86, -1, 83, 84, 86, 53, -1, 53, 86, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 84, 83, 31, 84, 86, 38, 42, -1, 85, 43, 39, 87, -1, 84, 85, 87, 86, -1, 86, 87, 39, 38, -1, 38, 39, 43, 42, -1, 42, 43, 85, 84, 31, 10, 9, 8, 11, -1, 56, 60, 48, 52, -1, 10, 56, 52, 9, -1, 9, 52,
1639 48, 8, -1, 8, 48, 60, 11, -1, 11, 60, 56, 10, 31, 56, 52,
1640 48, 60, -1, 57, 61, 49, 53, -1, 56, 57, 53, 52, -1, 52, 53, 49, 48, -1, 48, 49, 61, 60, -1, 60, 61, 57, 56, 31, 57, 53, 49, 61, -1, 58, 62, 50, 54, -1, 57, 58, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, 61, 62, 58, 57, 31, 58, 54, 50, 62, -1, 59, 63, 51, 55, -1, 58, 59, 55, 54, -1, 54, 55, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 59, 58, 31, 12, 13, 9, 10, -1, 64, 56, 52, 68, -1, 12, 64, 68, 13, -1, 13, 68, 52, 9, -1, 9, 52, 56, 10, -1, 10, 56, 64, 12, 31, 64, 68, 52, 56, -1, 65, 57, 53, 69, -1, 64, 65, 69, 68, -1, 68, 69, 53, 52, -1, 52, 53, 57, 56, -1, 56, 57, 65, 64, 31, 65, 69, 53, 57, -1, 66, 58, 54, 70, -1, 65, 66, 70, 69, -1, 69, 70,
1641 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 66, 65, 31, 66, 70, 54, 58, -1, 67, 59, 55, 71, -1, 66, 67, 71, 70, -1, 70, 71, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 67, 66, 31, 14, 15, 13, 12, -1, 72, 64, 68, 76, -1, 14, 72, 76, 15, -1, 15, 76, 68, 13, -1, 13, 68, 64, 12, -1, 12, 64, 72, 14, 31, 72, 76, 68, 64, -1, 73, 65, 69, 77, -1, 72, 73, 77, 76, -1, 76, 77, 69, 68, -1, 68, 69, 65, 64, -1, 64, 65, 73, 72, 31, 73, 77, 69, 65, -1, 74, 66, 70, 78, -1, 73, 74, 78, 77, -1, 77, 78, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 74, 73, 31, 74, 78, 70, 66, -1, 75, 67, 71, 79, -1, 74, 75, 79, 78, -1, 78, 79, 71, 70, -1, 70, 71, 67, 66, -1,
1642 66, 67, 75, 74, 31, 2, 3, 13, 81, -1, 24, 90, 68, 28, -1, 2, 24, 28, 3, -1, 3, 28, 68, 13, -1, 13, 68, 90, 81, -1, 81, 90, 24, 2, 31, 24, 28, 68, 90, -1, 25, 91, 69, 29, -1, 24, 25, 29, 28, -1, 28, 29, 69, 68, -1, 68, 69, 91, 90, -1, 90, 91, 25, 24, 31, 25, 29, 69, 91, -1, 26, 92, 88, 30, -1, 25, 26, 30, 29, -1, 29, 30, 88, 69, -1, 69, 88, 92, 91, -1, 91, 92, 26, 25, 31, 26, 30, 88, 92, -1, 27, 93, 89, 31, -1, 26, 27, 31, 30, -1, 30, 31, 89, 88, -1, 88, 89, 93, 92, -1, 92, 93, 27, 26, 31, 13, 3, 5, 9, -1, 68, 52, 36, 28, -1, 13, 68, 28, 3, -1, 3, 28, 36, 5, -1, 5, 36, 52, 9, -1, 9, 52, 68, 13, 31, 68, 28, 36, 52, -1, 69, 53, 37, 29, -1, 68, 69, 29,
1643 28, -1, 28, 29, 37, 36, -1, 36, 37, 53, 52, -1, 52, 53, 69, 68, 31, 69, 29, 37, 53, -1, 88, 86, 38, 30, -1, 69, 88, 30, 29, -1, 29, 30, 38, 37, -1, 37, 38, 86, 53, -1, 53, 86, 88, 69, 31, 88, 30, 38, 86, -1, 89, 87, 39, 31, -1, 88, 89, 31, 30, -1, 30, 31, 39, 38, -1, 38, 39, 87, 86, -1, 86, 87, 89, 88])
1644 cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080])
1645 m3.setConnectivity(c, cI)
1646 m3.checkConsistency()
1647 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1648 grpIds = DataArrayInt([2,7,12,17,95,99,103,107,129,133,137,141]); grpIds.setName("group")
1649 mfu = MEDFileUMesh()
1650 mfu.setMeshAtLevel(0, m3)
1651 mfu.setMeshAtLevel(-1, m2)
1652 mfu.setGroupsAtLevel(-1, [grpIds])
1653 nNod = m3.getNumberOfNodes()
1654 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1655 m3_bis = mfu.getMeshAtLevel(0)
1656 m3_bis.checkConsistency()
1657 m2_bis = mfu.getMeshAtLevel(-1)
1658 m2_bis.checkConsistency()
1659 self.assertEqual(nNod+22, mfu.getNumberOfNodes())
1660 self.assertEqual(nNod+22, m3_bis.getNumberOfNodes())
1661 self.assertEqual(nNod+22, m2_bis.getNumberOfNodes())
1662 self.assertEqual([0, 3, 12, 13, 16, 17, 18, 19, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89], nodesDup.getValues())
1663 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1664 self.assertEqual(set([0, 1, 2, 3, 24, 25, 26, 27, 28, 29, 30, 31]), set(cells1.getValues()))
1665 self.assertEqual(set([4, 5, 6, 7, 20, 21, 22, 23, 32, 33, 34, 35]), set(cells2.getValues()))
1666 self.assertEqual([2, 7, 12, 17, 95, 99, 103, 107, 129, 133, 137, 141],mfu.getGroupArr(-1,"group").getValues())
1667 self.assertEqual([151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1668 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1669 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1672 def testBuildInnerBoundary8(self):
1673 """ 3D test where the crack leaves 'naked' cells. If we call a 'close-to-crack cell' a cell which shares a face with the M1 group,
1674 a 'naked cell' is a cell that has some node duplicated, but which do not share any face with a 'close-to-crack cell'. In this case
1675 it is tricky to decide whether this cell should be renumbered or not ...
1676 Warning: on the mesh below some points have already been doubled by a previous cut.
1678 m3 = MEDCouplingUMesh('box', 3)
1679 coo = DataArrayDouble([(0,15,0),(0,5,0),(3,5,0),(5,5,0),(5,15,0),(5,20,0),(0,20,0),(15,20,0),(15,15,0),(20,15,0),(20,20,0),(20,5,0),(15,5,0),(15,0,0),(20,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),
1680 (3,3,0),(0,0,0),(0,3,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(0,5,10),(0,5,20),(0,5,30),(0,5,40),(3,5,10),(3,5,20),(3,5,30),(3,5,40),(5,5,10),(5,5,20),(5,5,30),(5,5,40),(5,15,10),(5,15,20),(5,15,30),
1681 (5,15,40),(5,20,10),(5,20,20),(5,20,30),(5,20,40),(0,20,10),(0,20,20),(0,20,30),(0,20,40),(15,20,10),(15,20,20),(15,20,30),(15,20,40),(15,15,10),(15,15,20),(15,15,30),(15,15,40),(20,15,10),(20,15,20),
1682 (20,15,30),(20,15,40),(20,20,10),(20,20,20),(20,20,30),(20,20,40),(20,5,10),(20,5,20),(20,5,30),(20,5,40),(15,5,10),(15,5,20),(15,5,30),(15,5,40),(15,0,10),(15,0,20),(15,0,30),(15,0,40),(20,0,10),
1683 (20,0,20),(20,0,30),(20,0,40),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,-1.60551e-25,30),(5,-1.60551e-25,40),(5,3,10),(5,3,20),(5,3,30),(5,3,40),(3,0,10),(3,0,20),(3,0,30),(3,0,40),(3,3,10),(3,3,20),
1684 (3,3,30),(3,3,40),(0,0,10),(0,0,20),(0,0,30),(0,0,40),(0,3,10),(0,3,20),(0,3,30),(0,3,40),(0,9,0),(3,9,0),(20,9,0),(0,9,10),(0,9,20),(0,9,30),(0,9,40),(3,9,10),(3,9,20),(3,9,30),(3,9,40),(5,9,30),
1685 (5,9,40),(20,9,10),(20,9,20),(20,9,30),(20,9,40),(15,9,30),(15,9,40),(0,15,0),(20,15,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(5,15,30),(5,15,40),(15,15,30),(15,15,40),(20,15,10),(20,15,20),(20,15,30),
1688 c = DataArrayInt([31, 5, 4, 124, 6, -1, 41, 45, 126, 37, -1, 5, 41, 37, 4, -1, 4, 37, 126, 124, -1, 124, 126, 45, 6, -1, 6, 45, 41, 5, 31, 41, 37, 126, 45, -1, 42, 46, 127, 38, -1, 41, 42, 38, 37, -1, 37, 38, 127, 126, -1, 126, 127, 46, 45, -1, 45, 46, 42, 41, 31, 42, 38, 127, 46, -1, 43, 47, 128, 130, -1, 42, 43, 130, 38, -1, 38, 130, 128, 127, -1, 127, 128, 47, 46, -1, 46, 47, 43, 42, 31, 43, 130, 128, 47,
1689 -1, 44, 48, 129, 131, -1, 43, 44, 131, 130, -1, 130, 131, 129, 128, -1, 128, 129, 48, 47, -1, 47, 48, 44, 43, 31, 7, 8, 4, 5, -1, 49, 41, 37, 53, -1, 7, 49, 53, 8, -1, 8, 53, 37, 4, -1, 4, 37, 41, 5, -1, 5, 41, 49, 7, 31, 49, 53, 37, 41, -1, 50, 42, 38, 54, -1, 49, 50, 54, 53, -1, 53, 54, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 50, 49, 31, 50, 54, 38, 42, -1, 51, 43, 130, 132, -1, 50, 51, 132, 54, -1, 54, 132,
1690 130, 38, -1, 38, 130, 43, 42, -1, 42, 43, 51, 50, 31, 51, 132, 130, 43, -1, 52, 44, 131, 133, -1, 51, 52, 133, 132, -1, 132, 133, 131, 130, -1, 130, 131, 44, 43, -1, 43, 44, 52, 51, 31, 125, 8, 7, 10, -1, 134, 61, 49, 53, -1, 125, 134, 53, 8, -1, 8, 53, 49, 7, -1, 7, 49, 61, 10, -1, 10, 61, 134, 125, 31, 134, 53, 49, 61, -1, 135, 62, 50, 54, -1, 134, 135, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1,
1691 61, 62, 135, 134, 31, 135, 54, 50, 62, -1, 136, 63, 51, 132, -1, 135, 136, 132, 54, -1, 54, 132, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 136, 135, 31, 136, 132, 51, 63, -1, 137, 64, 52, 133, -1, 136, 137, 133, 132, -1, 132, 133, 52, 51, -1, 51, 52, 64, 63, -1, 63, 64, 137, 136, 31, 107, 12, 8, 9, -1, 118, 57, 53, 69, -1, 107, 118, 69, 12, -1, 12, 69, 53, 8, -1, 8, 53, 57, 9, -1, 9, 57, 118, 107, 31, 118, 69,
1692 53, 57, -1, 119, 58, 54, 70, -1, 118, 119, 70, 69, -1, 69, 70, 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 119, 118, 31, 119, 70, 54, 58, -1, 120, 59, 55, 122, -1, 119, 120, 122, 70, -1, 70, 122, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 120, 119, 31, 120, 122, 55, 59, -1, 121, 60, 56, 123, -1, 120, 121, 123, 122, -1, 122, 123, 56, 55, -1, 55, 56, 60, 59, -1, 59, 60, 121, 120, 31, 13, 12, 11, 14, -1, 73, 77, 65, 69,
1693 -1, 13, 73, 69, 12, -1, 12, 69, 65, 11, -1, 11, 65, 77, 14, -1, 14, 77, 73, 13, 31, 73, 69, 65, 77, -1, 74, 78, 66, 70, -1, 73, 74, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 78, 77, -1, 77, 78, 74, 73, 31, 74, 70, 66, 78, -1, 75, 79, 67, 71, -1, 74, 75, 71, 70, -1, 70, 71, 67, 66, -1, 66, 67, 79, 78, -1, 78, 79, 75, 74, 31, 75, 71, 67, 79, -1, 76, 80, 68, 72, -1, 75, 76, 72, 71, -1, 71, 72, 68, 67, -1, 67, 68, 80,
1694 79, -1, 79, 80, 76, 75, 31, 17, 18, 16, 15, -1, 89, 81, 85, 93, -1, 17, 89, 93, 18, -1, 18, 93, 85, 16, -1, 16, 85, 81, 15, -1, 15, 81, 89, 17, 31, 89, 93, 85, 81, -1, 90, 82, 86, 94, -1, 89, 90, 94, 93, -1, 93, 94, 86, 85, -1, 85, 86, 82, 81, -1, 81, 82, 90, 89, 31, 90, 94, 86, 82, -1, 91, 83, 87, 95, -1, 90, 91, 95, 94, -1, 94, 95, 87, 86, -1, 86, 87, 83, 82, -1, 82, 83, 91, 90, 31, 91, 95, 87, 83, -1, 92, 84,
1695 88, 96, -1, 91, 92, 96, 95, -1, 95, 96, 88, 87, -1, 87, 88, 84, 83, -1, 83, 84, 92, 91, 31, 19, 20, 18, 17, -1, 97, 89, 93, 101, -1, 19, 97, 101, 20, -1, 20, 101, 93, 18, -1, 18, 93, 89, 17, -1, 17, 89, 97, 19, 31, 97, 101, 93, 89, -1, 98, 90, 94, 102, -1, 97, 98, 102, 101, -1, 101, 102, 94, 93, -1, 93, 94, 90, 89, -1, 89, 90, 98, 97, 31, 98, 102, 94, 90, -1, 99, 91, 95, 103, -1, 98, 99, 103, 102, -1, 102, 103,
1696 95, 94, -1, 94, 95, 91, 90, -1, 90, 91, 99, 98, 31, 99, 103, 95, 91, -1, 100, 92, 96, 104, -1, 99, 100, 104, 103, -1, 103, 104, 96, 95, -1, 95, 96, 92, 91, -1, 91, 92, 100, 99, 31, 1, 2, 18, 20, -1, 25, 101, 93, 29, -1, 1, 25, 29, 2, -1, 2, 29, 93, 18, -1, 18, 93, 101, 20, -1, 20, 101, 25, 1, 31, 25, 29, 93, 101, -1, 26, 102, 94, 30, -1, 25, 26, 30, 29, -1, 29, 30, 94, 93, -1, 93, 94, 102, 101, -1, 101, 102,
1697 26, 25, 31, 26, 30, 94, 102, -1, 27, 103, 95, 31, -1, 26, 27, 31, 30, -1, 30, 31, 95, 94, -1, 94, 95, 103, 102, -1, 102, 103, 27, 26, 31, 27, 31, 95, 103, -1, 28, 104, 96, 32, -1, 27, 28, 32, 31, -1, 31, 32, 96, 95, -1, 95, 96, 104, 103, -1, 103, 104, 28, 27, 31, 3, 4, 8, 12, -1, 33, 69, 53, 37, -1, 3, 33, 37, 4, -1, 4, 37, 53, 8, -1, 8, 53, 69, 12, -1, 12, 69, 33, 3, 31, 33, 37, 53, 69, -1, 34, 70, 54, 38, -1,
1698 33, 34, 38, 37, -1, 37, 38, 54, 53, -1, 53, 54, 70, 69, -1, 69, 70, 34, 33, 31, 34, 38, 54, 70, -1, 116, 122, 55, 39, -1, 34, 116, 39, 38, -1, 38, 39, 55, 54, -1, 54, 55, 122, 70, -1, 70, 122, 116, 34, 31, 116, 39, 55, 122, -1, 117, 123, 56, 40, -1, 116, 117, 40, 39, -1, 39, 40, 56, 55, -1, 55, 56, 123, 122, -1, 122, 123, 117, 116, 31, 16, 18, 2, 3, -1, 85, 33, 29, 93, -1, 16, 85, 93, 18, -1, 18, 93, 29, 2,
1699 -1, 2, 29, 33, 3, -1, 3, 33, 85, 16, 31, 85, 93, 29, 33, -1, 86, 34, 30, 94, -1, 85, 86, 94, 93, -1, 93, 94, 30, 29, -1, 29, 30, 34, 33, -1, 33, 34, 86, 85, 31, 86, 94, 30, 34, -1, 87, 35, 31, 95, -1, 86, 87, 95, 94, -1, 94, 95, 31, 30, -1, 30, 31, 35, 34, -1, 34, 35, 87, 86, 31, 87, 95, 31, 35, -1, 88, 36, 32, 96, -1, 87, 88, 96, 95, -1, 95, 96, 32, 31, -1, 31, 32, 36, 35, -1, 35, 36, 88, 87, 31, 4, 3, 106,
1700 105, 0, -1, 37, 21, 108, 112, 33, -1, 3, 4, 37, 33, -1, 106, 3, 33, 112, -1, 105, 106, 112, 108, -1, 0, 105, 108, 21, -1, 4, 0, 21, 37, 31, 37, 33, 112, 108, 21, -1, 38, 22, 109, 113, 34, -1, 33, 37, 38, 34, -1, 112, 33, 34, 113, -1, 108, 112, 113, 109, -1, 21, 108, 109, 22, -1, 37, 21, 22, 38, 31, 38, 34, 113, 109, 22, -1, 39, 23, 110, 114, 116, -1, 34, 38, 39, 116, -1, 113, 34, 116, 114, -1, 109, 113, 114, 110,
1701 -1, 22, 109, 110, 23, -1, 38, 22, 23, 39, 31, 39, 116, 114, 110, 23, -1, 40, 24, 111, 115, 117, -1, 116, 39, 40, 117, -1, 114, 116, 117, 115, -1, 110, 114, 115, 111, -1, 23, 110, 111, 24, -1, 39, 23, 24, 40, 31, 16, 3, 12, 13, 15, -1, 85, 81, 73, 69, 33, -1, 3, 16, 85, 33, -1, 12, 3, 33, 69, -1, 13, 12, 69, 73, -1, 15, 13, 73, 81, -1, 16, 15, 81, 85, 31, 85, 33, 69, 73, 81, -1, 86, 82, 74, 70, 34, -1, 33, 85,
1702 86, 34, -1, 69, 33, 34, 70, -1, 73, 69, 70, 74, -1, 81, 73, 74, 82, -1, 85, 81, 82, 86, 31, 86, 34, 70, 74, 82, -1, 87, 83, 75, 71, 35, -1, 34, 86, 87, 35, -1, 70, 34, 35, 71, -1, 74, 70, 71, 75, -1, 82, 74, 75, 83, -1, 86, 82, 83, 87, 31, 87, 35, 71, 75, 83, -1, 88, 84, 76, 72, 36, -1, 35, 87, 88, 36, -1, 71, 35, 36, 72, -1, 75, 71, 72, 76, -1, 83, 75, 76, 84, -1, 87, 83, 84, 88])
1703 cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080, 1110, 1140, 1170, 1200, 1237, 1274, 1311, 1348, 1385, 1422, 1459, 1496])
1704 m3.setConnectivity(c, cI)
1705 m3.checkConsistency()
1706 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1707 grpIds = DataArrayInt([2,7,12,17,101,106,111,116,160,164,170,173,176,179]); grpIds.setName("group")
1708 mfu = MEDFileUMesh()
1709 mfu.setMeshAtLevel(0, m3)
1710 mfu.setMeshAtLevel(-1, m2)
1711 mfu.setGroupsAtLevel(-1, [grpIds])
1712 nNod = m3.getNumberOfNodes()
1713 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1714 m3_bis = mfu.getMeshAtLevel(0)
1715 m3_bis.checkConsistency()
1716 m2_bis = mfu.getMeshAtLevel(-1)
1717 m2_bis.checkConsistency()
1718 self.assertEqual(nNod+23, mfu.getNumberOfNodes())
1719 self.assertEqual(nNod+23, m3_bis.getNumberOfNodes())
1720 self.assertEqual(nNod+23, m2_bis.getNumberOfNodes())
1721 self.assertEqual([5, 15, 16, 35, 36, 39, 40, 41, 42, 43, 44, 81, 82, 83, 84, 85, 86, 87, 88, 116, 117, 130, 131], nodesDup.getValues())
1722 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1723 self.assertEqual(set([0, 1, 2, 3, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39]), set(cells1.getValues()))
1724 self.assertEqual(set([4, 5, 6, 7, 42, 43, 44, 45, 46, 47]), set(cells2.getValues()))
1725 self.assertEqual([2, 7, 12, 17, 101, 106, 111, 116, 160, 164, 170, 173, 176, 179],mfu.getGroupArr(-1,"group").getValues())
1726 self.assertEqual([212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1727 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1728 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1731 def testBuildInnerBoundary9(self):
1732 """ 3D test where the crack is performed so that two non-connex parts are found facing one single connex part on the other side
1735 m3 = MEDCouplingUMesh('box', 3)
1736 coo = DataArrayDouble([(0,4.6,0),(3,4.6,0),(5,4.6,0),(15,4.6,0),(15,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),(3,3.8,0),(0,0,0),(0,3.8,0),(0,4.6,10),(0,4.6,20),(3,4.6,10),(3,4.6,20),(5,4.6,10),(5,4.6,20),(15,4.6,10),(15,4.6,20),(15,0,10),(15,0,20),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,3,10),(5,3,20),(3,0,10),(3,0,20),(3,3.8,10),(3,3.8,20),(0,0,10),(0,0,20),(0,3.8,10),(0,3.8,20),(3,3,0),(0,3,0),(3,3,10),(3,3,20),(0,3,10),(0,3,20)])
1738 c = DataArrayInt([31, 7, 33, 6, 5, -1, 25, 21, 23, 35, -1, 7, 25, 35, 33, -1, 33, 35, 23, 6, -1, 6, 23, 21, 5, -1, 5, 21, 25, 7, 31, 25, 35, 23, 21, -1, 26, 22, 24, 36, -1, 25, 26, 36, 35, -1, 35, 36, 24, 23, -1, 23, 24, 22, 21, -1, 21, 22, 26, 25, 31, 9, 34, 33, 7, -1, 29, 25, 35, 37, -1, 9, 29, 37, 34, -1, 34, 37, 35, 33, -1, 33, 35, 25, 7, -1, 7, 25, 29, 9, 31, 29, 37, 35, 25, -1, 30, 26, 36, 38, -1, 29, 30, 38, 37, -1, 37, 38, 36, 35, -1, 35, 36, 26, 25, -1, 25, 26, 30, 29, 31, 0, 1, 8, 10, -1, 11, 31, 27, 13, -1, 0, 11, 13, 1, -1, 1, 13, 27, 8, -1, 8, 27, 31, 10, -1, 10, 31, 11, 0, 31, 11, 13, 27, 31, -1, 12, 32, 28, 14, -1, 11, 12, 14, 13, -1, 13, 14, 28, 27, -1, 27, 28, 32, 31, -1, 31, 32, 12, 11, 31, 6, 8, 1, 2, -1, 23, 15, 13, 27, -1, 6, 23, 27, 8, -1, 8, 27, 13, 1, -1, 1, 13, 15, 2, -1, 2, 15, 23, 6, 31, 23, 27, 13, 15, -1, 24, 16, 14, 28, -1, 23, 24, 28, 27, -1, 27, 28, 14, 13, -1, 13, 14, 16, 15, -1, 15, 16, 24, 23, 31, 6, 2, 3, 4, 5, -1, 23, 21, 19, 17, 15, -1, 2, 6, 23, 15, -1, 3, 2, 15, 17, -1, 4, 3, 17, 19, -1, 5, 4, 19, 21, -1, 6, 5, 21, 23, 31, 23, 15, 17, 19, 21, -1, 24, 22, 20, 18, 16, -1, 15, 23, 24, 16, -1, 17, 15, 16, 18, -1, 19, 17, 18, 20, -1, 21, 19, 20, 22, -1, 23, 21, 22, 24])
1739 cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 277, 314])
1740 m3.setConnectivity(c, cI)
1741 m3.checkConsistency()
1742 m2, _, _,_,_ = m3.buildDescendingConnectivity()
1743 grpIds = DataArrayInt([4,9,35,39]); grpIds.setName("group")
1744 mfu = MEDFileUMesh()
1745 mfu.setMeshAtLevel(0, m3)
1746 mfu.setMeshAtLevel(-1, m2)
1747 mfu.setGroupsAtLevel(-1, [grpIds])
1748 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1749 grpIds = DataArrayInt([4,9,35,39]); grpIds.setName("group")
1750 mfu = MEDFileUMesh()
1751 mfu.setMeshAtLevel(0, m3)
1752 mfu.setMeshAtLevel(-1, m2)
1753 mfu.setGroupsAtLevel(-1, [grpIds])
1754 nNod = m3.getNumberOfNodes()
1755 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1756 m3_bis = mfu.getMeshAtLevel(0)
1757 m3_bis.checkConsistency()
1758 m2_bis = mfu.getMeshAtLevel(-1)
1759 m2_bis.checkConsistency()
1760 self.assertEqual(nNod+9, mfu.getNumberOfNodes())
1761 self.assertEqual(nNod+9, m3_bis.getNumberOfNodes())
1762 self.assertEqual(nNod+9, m2_bis.getNumberOfNodes())
1763 self.assertEqual([2, 5, 6, 15, 16, 21, 22, 23, 24], nodesDup.getValues())
1764 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1765 self.assertEqual(set([0,1,6,7]), set(cells1.getValues()))
1766 self.assertEqual(set([8,9]), set(cells2.getValues()))
1767 self.assertEqual([4,9,35,39],mfu.getGroupArr(-1,"group").getValues())
1768 self.assertEqual([49, 50, 51, 52],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1769 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1770 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1773 def testBuildInnerBoundary10(self):
1774 """ 2D tests where some cells are touching the M1 group with just a node, and are **not** neighbor
1775 with any cells touching the M1 group by a face.
1777 m2 = MEDCouplingUMesh("mesh", 2)
1778 coo = DataArrayDouble([0.0, 0.0, 1.0, 0.0, 2.0, 0.0, 3.0, 0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 1.0, 0.0, 2.0, 1.0, 2.0, 2.0, 2.0, 3.0, 2.0, 2.5, 0.0, 3.0, 0.5], 14, 2)
1780 c = DataArrayInt([ 3,12,2,6, 3,3,12,6, 3,13,3,6, 3,7,13,6, 4, 1, 0, 4, 5, 4, 2, 1, 5, 6, 4, 5, 4, 8, 9, 4, 6, 5, 9, 10, 4, 7, 6, 10, 11])
1781 cI = DataArrayInt([0,4,8,12,16,21,26,31,36,41])
1782 m2.setConnectivity(c, cI)
1783 m2.checkConsistency()
1784 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1785 grpIds = DataArrayInt([8,14]); grpIds.setName("group")
1786 mfu = MEDFileUMesh()
1787 mfu.setMeshAtLevel(0, m2)
1788 mfu.setMeshAtLevel(-1, m1)
1789 mfu.setGroupsAtLevel(-1, [grpIds])
1790 nNod = m2.getNumberOfNodes()
1791 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1792 m2_bis = mfu.getMeshAtLevel(0)
1793 m2_bis.checkConsistency()
1794 m1_bis = mfu.getMeshAtLevel(-1)
1795 m1_bis.checkConsistency()
1796 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1797 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1798 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1799 self.assertEqual([6, 7], nodesDup.getValues())
1800 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1801 self.assertEqual(set([0,1,2,3,5]), set(cells1.getValues()))
1802 self.assertEqual(set([7,8]), set(cells2.getValues()))
1803 self.assertEqual([8,14],mfu.getGroupArr(-1,"group").getValues())
1804 self.assertEqual([22,23],mfu.getGroupArr(-1,"group_dup").getValues())
1808 def testBasicConstructors(self):
1809 GeneratePyfile18(self)
1810 fname="Pyfile18.med"
1811 TestWriteUMeshesRW1(self)
1812 m=MEDFileMesh.New(fname)
1813 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1814 m=MEDFileMesh.New(fname)
1815 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1816 m=MEDFileUMesh(fname)
1818 self.internalMEDMesh6()
1819 m=MEDFileCMesh("MEDFileMesh5.med")
1820 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1822 m=MEDFileMeshMultiTS()
1823 m=MEDFileMeshMultiTS(fname)
1824 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1826 m=MEDFileMeshes(fname)
1828 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1829 m=MEDFileFieldMultiTS()
1830 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1832 m=MEDFileFields(fname)
1834 m=MEDFileData(fname)
1836 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1837 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1838 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1839 m=MEDCouplingCMesh()
1840 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1841 m=MEDCouplingFieldTemplate(ON_NODES)
1842 m=MEDCouplingMultiFields([])
1843 m=MEDCouplingFieldOverTime([])
1846 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1848 def testBugSemiPartialField(self):
1849 fname="Pyfile46.med"
1850 m=MEDLoaderDataForTest.build2DMesh_3()
1851 m=m[:10] ; m.setName("mesh")
1852 f=m.getMeasureField(False)
1853 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1855 f.setName("SemiPartialField")
1857 f1=f[:6] ; f1.getMesh().setName(m.getName())
1858 f2=f[6:] ; f2.getMesh().setName(m.getName())
1860 mm=MEDFileUMesh.New()
1861 mm.setMeshAtLevel(0,m)
1862 ff=MEDFileField1TS.New()
1863 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1867 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1868 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1869 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1871 fread.checkConsistencyLight()
1872 fread2.checkConsistencyLight()
1873 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1874 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1878 def testUnPolyze1(self):
1879 fname="Pyfile47.med"
1880 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1881 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]
1882 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1883 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]]))
1885 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1886 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1887 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1888 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1889 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1890 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1891 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1892 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1894 mm.setRenumFieldArr(0,None)
1895 mm.setFamilyFieldArr(-1,None)
1899 def testUnPolyze2(self):
1900 fname="Pyfile48.med"
1901 mfd=MEDFileData.New()
1902 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1903 meshes=MEDFileMeshes.New()
1905 mfd.setMeshes(meshes)
1906 fields=MEDFileFields.New()
1907 mfd.setFields(fields)
1908 ff=MEDFileFieldMultiTS.New()
1909 fields.pushField(ff)
1911 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1912 f0_0.setTime(9.5,3,4)
1913 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1915 f0_0.setMesh(mm.getMeshAtLevel(0))
1916 ff.appendFieldNoProfileSBT(f0_0)
1917 ff0=ff.getTimeStepAtPos(0)
1918 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1919 f0_1.setTime(9.5,3,4)
1920 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1921 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1922 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1924 ff0.setFieldProfile(f0_1,mm,0,pfl)
1925 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1926 f0_2.setTime(9.5,3,4)
1927 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1928 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
1929 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1931 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1932 mfd.getFields().shallowCpyGlobs(ff0)
1934 mfd.unPolyzeMeshes()
1936 fmts=mfd.getFields()[0]
1937 self.assertEqual(fmts.getNumberOfTS(),1)
1938 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1939 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1940 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))])
1941 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1942 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1943 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1944 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1945 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1946 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1947 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1948 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))
1949 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1950 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1951 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1952 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1953 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1954 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])
1955 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1956 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1957 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1958 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])
1959 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1965 def testGaussWriteOnPfl1(self):
1966 fname="Pyfile49.med"
1967 fname2="Pyfile50.med"
1968 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1969 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1970 mQ8.allocateCells(1)
1971 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1972 mQ8.finishInsertingCells()
1973 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1974 mQ4.allocateCells(1)
1975 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1976 mQ4.finishInsertingCells()
1977 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1978 mT3.allocateCells(1)
1979 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1980 mT3.finishInsertingCells()
1982 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.]]
1983 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1984 ms[:]=(elt.deepCopy() for elt in ms)
1985 for m,t in zip(ms,tr):
1986 d=m.getCoords() ; d+= t
1988 m=MEDCouplingUMesh.MergeUMeshes(ms)
1990 m2=m[:13] ; m2.setName(m.getName())
1991 ### 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.
1992 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1993 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1996 da=DataArrayDouble(34) ; da.iota(3.)
1998 f.setName("fieldCellOnPflWithoutPfl")
1999 fInvalid=f.deepCopy()
2000 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])
2001 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])
2002 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])
2003 f.checkConsistencyLight()
2004 fInvalid2=fInvalid.deepCopy()
2005 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
2008 mm.setMeshAtLevel(0,m)
2011 f1ts=MEDFileField1TS.New()
2012 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
2013 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
2014 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
2015 f1ts.setFieldProfile(f,mm,0,pfl)
2018 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
2019 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
2020 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
2021 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
2022 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
2023 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
2024 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
2025 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
2027 dataRead=MEDFileData.New(fname)
2028 mRead=dataRead.getMeshes()[0]
2029 f1tsRead=dataRead.getFields()[0][0]
2030 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2031 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2032 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2033 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2034 f2_bis.checkConsistencyLight()
2035 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
2037 WriteField(fname2,f,True)
2038 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2039 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
2040 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
2041 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2042 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
2043 m2=m[pfl] ; m2.setName(m.getName())
2046 da=DataArrayDouble(35) ; da.iota(3.)
2048 f.setName("fieldCellOnPflWithoutPfl2")
2049 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
2050 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])
2051 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])
2052 f.checkConsistencyLight()
2055 mm.setMeshAtLevel(0,m)
2057 f1ts=MEDFileField1TS.New()
2058 f1ts.setFieldProfile(f,mm,0,pfl)
2059 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
2060 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
2061 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
2062 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
2064 dataRead=MEDFileData.New(fname)
2065 mRead=dataRead.getMeshes()[0]
2066 f1tsRead=dataRead.getFields()[0][0]
2067 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2068 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2069 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
2070 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2071 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2072 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
2073 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2075 WriteField(fname2,f,True)
2076 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2077 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2078 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2079 ## Use case 3 : no pfl but creation of pfls due to gauss pts
2080 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2083 da=DataArrayDouble(60) ; da.iota(3.)
2085 f.setName("fieldCellWithoutPfl")
2086 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])
2087 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])
2088 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])
2089 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])
2090 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])
2091 f.checkConsistencyLight()
2093 mm.setMeshAtLevel(0,m)
2094 f1ts=MEDFileField1TS.New()
2095 f1ts.setFieldNoProfileSBT(f)
2096 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2097 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2098 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2099 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2100 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2104 dataRead=MEDFileData.New(fname)
2105 mRead=dataRead.getMeshes()[0]
2106 f1tsRead=dataRead.getFields()[0][0]
2107 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2108 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2109 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2110 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2111 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2112 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2114 WriteField(fname2,f,True)
2115 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2116 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2117 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2120 # Testing profile on nodes when the profile is identity but not on all nodes.
2122 def testMEDFieldPflOnNode1(self):
2123 fname="Pyfile51.med"
2124 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)
2125 m0=MEDCouplingUMesh("Mesh",2)
2127 m0.insertNextCell(NORM_TRI3,[1,4,2])
2128 m0.insertNextCell(NORM_TRI3,[4,5,2])
2129 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2130 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2131 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2132 m0.finishInsertingCells()
2134 m1=MEDCouplingUMesh(m0.getName(),1)
2136 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2138 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2140 m1.finishInsertingCells()
2144 m.setMeshAtLevel(0,m0)
2145 m.setMeshAtLevel(-1,m1)
2147 dt=3 ; it=2 ; tim=4.5
2148 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2149 fieldNode0.setName("fieldNode0")
2150 fieldNode0.setTime(tim,dt,it)
2151 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2152 arr=DataArrayDouble([10,11,12,13,14])
2153 fieldNode0.setArray(arr)
2154 f0=MEDFileField1TS()
2155 f0.setFieldProfile(fieldNode0,m,0,pfl0)
2156 m.write(fname,2) ; f0.write(fname,0)
2157 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2158 fieldNode1.setName("fieldNode1")
2159 fieldNode1.setTime(tim,dt,it)
2160 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2161 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2162 fieldNode1.setArray(arr1)
2163 f1=MEDFileField1TS()
2164 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2167 ## Reading from file
2168 m=MEDFileMesh.New(fname)
2169 m0=m.getMeshAtLevel(0)
2170 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2171 fieldNode0.setMesh(m00)
2172 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2173 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2174 ff0_1.checkConsistencyLight()
2175 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2176 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2177 ff0_2.checkConsistencyLight()
2178 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2179 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2180 ff0_3.checkConsistencyLight()
2181 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2182 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2183 ff0_4.checkConsistencyLight()
2184 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2185 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2186 m1=m.getMeshAtLevel(-1)
2187 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2188 fieldNode1.setMesh(m10)
2189 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2190 ff1_1.checkConsistencyLight()
2191 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2192 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2193 ff1_2.checkConsistencyLight()
2194 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2195 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2196 ff1_3.checkConsistencyLight()
2197 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2198 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2199 ff1_4.checkConsistencyLight()
2200 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2201 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]
2202 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]
2203 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]
2204 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2205 arr_r.setName(fieldNode1.getArray().getName())
2206 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2207 pfl1_r.setName(pfl1.getName())
2208 self.assertTrue(pfl1_r.isEqual(pfl1))
2211 # Testing profile on nodes when the profile is identity but not on all nodes.
2213 def testMEDFieldPflOnCell1(self):
2214 fname="Pyfile52.med"
2215 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)
2216 m0=MEDCouplingUMesh("Mesh",2)
2218 m0.insertNextCell(NORM_TRI3,[1,4,2])
2219 m0.insertNextCell(NORM_TRI3,[4,5,2])
2220 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2221 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2222 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2223 m0.finishInsertingCells()
2225 m1=MEDCouplingUMesh(m0.getName(),1)
2227 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2229 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2231 m1.finishInsertingCells()
2235 m.setMeshAtLevel(0,m0)
2236 m.setMeshAtLevel(-1,m1)
2238 dt=3 ; it=2 ; tim=4.5
2239 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2240 fieldCell0.setName("fieldCell0")
2241 fieldCell0.setTime(tim,dt,it)
2242 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2243 arr=DataArrayDouble([10,11,12])
2244 fieldCell0.setArray(arr)
2245 f0=MEDFileField1TS()
2246 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2247 m.write(fname,2) ; f0.write(fname,0)
2248 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2249 fieldCell1.setName("fieldCell1")
2250 fieldCell1.setTime(tim,dt,it)
2251 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2252 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2253 fieldCell1.setArray(arr1)
2254 f1=MEDFileField1TS()
2255 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2258 ## Reading from file
2259 m=MEDFileMesh.New(fname)
2260 m0=m.getMeshAtLevel(0)
2261 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2262 fieldCell0.setMesh(m00)
2263 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2264 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2265 ff0_1.checkConsistencyLight()
2266 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2267 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2268 ff0_2.checkConsistencyLight()
2269 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2270 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2271 ff0_3.checkConsistencyLight()
2272 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2273 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2274 ff0_4.checkConsistencyLight()
2275 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2276 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2277 m1=m.getMeshAtLevel(-1)
2278 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2279 fieldCell1.setMesh(m10)
2280 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2281 ff1_1.checkConsistencyLight()
2282 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2283 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2284 ff1_2.checkConsistencyLight()
2285 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2286 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2287 ff1_3.checkConsistencyLight()
2288 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2289 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2290 ff1_4.checkConsistencyLight()
2291 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2292 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]
2293 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]
2294 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]
2295 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2296 arr_r.setName(fieldCell1.getArray().getName())
2297 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2298 pfl1_r.setName(pfl1.getName())
2299 self.assertTrue(pfl1_r.isEqual(pfl1))
2303 def testMEDFileUMeshZipCoords1(self):
2305 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2306 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])
2307 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2308 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2309 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2310 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2311 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2312 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2313 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2314 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2315 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2316 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2318 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2319 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2320 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2321 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2322 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2323 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2324 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2325 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2326 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2330 def testMEDUMeshAddNodeGroup1(self):
2331 fname="Pyfile53.med"
2333 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2334 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])
2335 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2336 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2337 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2338 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2339 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2342 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2343 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2344 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2345 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2346 mm.setFamilyId("MyFam",2)
2347 mm.setFamilyId("MyOtherFam",3)
2348 mm.setFamilyId("MyOther-1",-1)
2349 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2350 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2352 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2354 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2355 mm.addNodeGroup(daTest)
2356 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2357 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
2359 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2360 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2362 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2363 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2364 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2365 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2367 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2368 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2369 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2370 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2371 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2372 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2374 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2375 da=DataArrayInt([3,12]) ; da.setName("grp0")
2376 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2378 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2380 mm=MEDFileMesh.New(fname)
2381 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2382 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2383 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2384 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2386 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2387 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2388 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2389 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2390 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2391 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2393 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2394 da=DataArrayInt([3,12]) ; da.setName("grp0")
2395 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2397 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2401 def testMEDUMeshAddGroup1(self):
2402 fname="Pyfile54.med"
2404 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2405 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2407 m0.insertNextCell(NORM_TRI3,[1,2,1])
2410 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2413 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2415 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2416 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2417 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2418 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2419 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2422 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2423 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2424 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2425 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2426 mm.setFamilyId("MyFam",2)
2427 mm.setFamilyId("MyOtherFam",3)
2428 mm.setFamilyId("MyOther-1",-1)
2429 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2430 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2432 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2433 mm.addGroup(0,daTest)
2434 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2435 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2436 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2437 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2439 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2440 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2441 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2442 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2443 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2444 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2446 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2447 da=DataArrayInt([3,12]) ; da.setName("grp0")
2448 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2450 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2452 mm=MEDFileMesh.New(fname)
2453 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2454 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2455 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2456 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2458 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2459 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2460 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2461 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2462 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2463 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2465 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2466 da=DataArrayInt([3,12]) ; da.setName("grp0")
2467 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2469 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2473 def testHeapMem1(self):
2474 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2476 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2478 m=MEDCouplingCMesh()
2479 arr=DataArrayDouble(10,1) ; arr.iota(0)
2480 m.setCoords(arr,arr)
2481 m=m.buildUnstructured()
2483 f=m.getMeasureField(False)
2484 cooMem = 100 * 2 * 8
2485 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2486 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2487 meshMem = cooMem + nodalMem + indexMem
2488 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2489 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2490 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2493 mm.setMeshAtLevel(0,m)
2494 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2495 ff=MEDFileField1TS()
2496 ff.setFieldNoProfileSBT(f)
2497 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2499 fff=MEDFileFieldMultiTS()
2500 fff.appendFieldNoProfileSBT(f)
2501 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2503 fff.appendFieldNoProfileSBT(f)
2504 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2505 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2508 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2509 fff.appendFieldProfile(f2,mm,0,pfl)
2510 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2511 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2512 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2515 def internalCurveLinearMesh1(self):
2516 fname="Pyfile55.med"
2517 mesh=MEDCouplingCurveLinearMesh();
2518 mesh.setTime(2.3,4,5);
2519 mesh.setTimeUnit("us");
2520 mesh.setName("Example of Cuve linear mesh");
2521 mesh.setDescription("buildCLMesh");
2522 a1=DataArrayDouble(3*20,1);
2523 a1.iota(7.) ; a1.rearrange(3);
2525 mesh.setNodeGridStructure([4,5]);
2526 mesh.checkConsistencyLight();
2528 m=MEDFileCurveLinearMesh()
2530 d=DataArrayInt(20) ; d.iota(4)
2531 m.setFamilyFieldArr(1,d)
2532 d3=DataArrayInt(20) ; d3.iota(400)
2533 m.setRenumFieldArr(1,d3)
2534 d2=DataArrayInt(12) ; d2.iota(40)
2535 m.setFamilyFieldArr(0,d2)
2536 d4=DataArrayInt(21) ; d4.iota(4000)
2537 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2539 m.setRenumFieldArr(1,d4)
2542 m1=MEDFileCurveLinearMesh(fname)
2544 self.assertTrue(mm.isEqual(mesh,1e-12))
2545 self.assertEqual(mm.getSpaceDimension(),3)
2546 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2548 m1=MEDFileMesh.New(fname)
2549 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2550 self.assertTrue(isinstance(m1.getUnivName(),str))
2551 self.assertTrue(len(m1.getUnivName())!=0)
2552 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2556 def testCurveLinearMesh1(self):
2557 self.internalCurveLinearMesh1()
2560 def testParameters1(self):
2561 self.internalParameters1()
2563 def internalParameters1(self):
2564 fname="Pyfile56.med"
2565 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2566 mm=MEDFileCMesh() ; mm.setMesh(m)
2567 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2569 p=MEDFileParameters()
2570 data.setParams(p) ; data.setMeshes(ms)
2571 pts=MEDFileParameterMultiTS()
2572 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2573 pts.appendValue(1,2,3.4,567.89)
2574 pts.appendValue(2,3,5.6,999.123)
2575 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2576 p.pushParam(pts) ; p.pushParam(pts2)
2578 p2=MEDFileParameters(fname)
2579 self.assertTrue(p.isEqual(p2,1e-14)[0])
2580 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2582 pts4=pts2.deepCopy()
2583 pts3=pts2.deepCopy()
2584 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2585 pts2.eraseTimeStepIds([0])
2586 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2588 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2589 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2590 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2591 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2592 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2594 self.assertTrue(p.isEqual(p2,1e-14)[0])
2595 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2596 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2597 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2598 self.assertEqual(p.getParamsNames(),('A','B'))
2599 ptsr=MEDFileParameterMultiTS(fname,"B")
2600 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2601 ptsr=MEDFileParameterMultiTS(fname)
2602 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2603 p1tsr=MEDFileParameterDouble1TS(fname)
2604 self.assertEqual(p1tsr.getName(),"A")
2605 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2606 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2607 self.assertEqual(p1tsr.getName(),"B")
2608 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2609 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2610 self.assertEqual(p1tsr.getName(),"B")
2611 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2612 data2=MEDFileData(fname)
2613 self.assertEqual(2,data2.getNumberOfParams())
2614 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2618 def testNamesOnCellAndNodesInMeshes1(self):
2619 fname="Pyfile58.med"
2620 fname2="Pyfile59.med"
2621 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2622 m1=m.buildDescendingConnectivity()[0]
2623 m1.sortCellsInMEDFileFrmt()
2626 mm.setMeshAtLevel(0,m)
2627 mm.setMeshAtLevel(-1,m1)
2628 namesCellL0=DataArrayAsciiChar(6,16)
2629 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2630 mm.setNameFieldAtLevel(0,namesCellL0)
2631 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2632 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2633 mm.setNameFieldAtLevel(-1,namesCellL1)
2634 namesNodes=namesCellL1.subArray(4,16)
2635 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2636 mm.setNameFieldAtLevel(1,namesNodes)
2639 mmr=MEDFileMesh.New(fname)
2640 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2641 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2642 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2643 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2644 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2645 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2646 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2647 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2649 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2650 # remove names on nodes
2651 mmCpy.setNameFieldAtLevel(1,None)
2652 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2653 mm.setNameFieldAtLevel(1,None)
2654 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2655 mm.setNameFieldAtLevel(-1,None)
2657 mmr=MEDFileMesh.New(fname)
2658 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2659 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2660 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2662 c=MEDCouplingCMesh()
2663 arr=DataArrayDouble([0.,1.1,2.3])
2664 c.setCoords(arr,arr)
2668 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2669 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2671 ccr=MEDFileMesh.New(fname2)
2672 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2673 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2674 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2675 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2676 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2677 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2678 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2680 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2684 def testToExportInExamples1(self):
2685 m=MEDCouplingCMesh()
2686 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2687 m.setCoords(arr,arr)
2688 m=m.buildUnstructured() ; m.setName("mesh")
2689 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2690 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2693 mm.setMeshAtLevel(0,m)
2694 mm.setMeshAtLevel(-1,m2)
2695 mm.setGroupsAtLevel(0,[grp1,grp2])
2696 mm.write("example.med",2)
2698 m0=mm.getMeshAtLevel(0)
2699 m1=mm.getMeshAtLevel(-1)
2700 grp1=mm.getGroupArr(0,"grp1")
2701 grp2=mm.getGroupArr(0,"grp2")
2703 whichGrp=DataArrayInt(m0.getNumberOfCells())
2704 whichGrp.fillWithValue(-1)
2705 for grpId,grp in enumerate(grps):
2708 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2709 e,f=a.areCellsIncludedIn(m1,2)
2711 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2712 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2713 c2.transformWithIndArr(whichGrp)
2714 splitOfM1=len(grps)*[None]
2715 for grpId,grp in enumerate(grps):
2716 tmp=c2.findIdsEqual(grpId)
2717 splitOfM1[grpId]=tmp
2719 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2720 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2724 def testBugCorrection1(self):
2727 self.assertEqual(fs[0],None)
2728 self.assertEqual(3,len(fs))
2732 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2733 f1Name="Pyfile60.med"
2734 f2Name="Pyfile61.med"
2735 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2737 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2739 # reading and compare
2740 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2741 for mn in d1.getMeshes().getMeshesNames():
2742 m1=d1.getMeshes()[mn]
2743 m2=d2.getMeshes()[mn]
2744 for lev in m1.getNonEmptyLevels():
2745 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2746 for grpName in grpsNames:
2747 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2751 for fieldn in d1.getFields().getFieldsNames():
2752 f1=d1.getFields()[fieldn]
2753 f2=d2.getFields()[fieldn]
2754 for it,order,tim in f1.getTimeSteps():
2757 if len(f1t.getPflsReallyUsed())!=0:
2759 for lev in f1t.getNonEmptyLevels()[1]:
2760 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2761 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2762 self.assertTrue(pfl1.isEqual(pfl2))
2763 self.assertTrue(arr1.isEqual(arr2,1e-10))
2768 for lev in f1t.getNonEmptyLevels()[1]:
2769 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2770 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2771 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2779 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2780 m=MEDCouplingCMesh()
2781 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2782 m.setCoords(arr,arr,arr)
2783 m=m.buildUnstructured()
2784 m2=m.buildDescendingConnectivity()[0]
2786 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2787 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2788 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2789 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2790 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2791 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2793 mm.setMeshAtLevel(0,m)
2794 mm.setGroupsAtLevel(0,[g1,g2])
2795 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2796 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2797 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2798 mm.normalizeFamIdsMEDFile()
2799 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2800 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2801 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2802 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2803 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2804 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2805 for g in mm.getGroupsOnSpecifiedLev(0):
2806 for f in mm.getFamiliesIdsOnGroup(g):
2807 self.assertTrue(f<0)
2812 mm.setMeshAtLevel(0,m)
2813 mm.setMeshAtLevel(-1,m2)
2814 mm.setGroupsAtLevel(0,[g1,g2])
2815 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2816 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2817 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2818 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2819 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2820 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2821 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2822 mm.normalizeFamIdsMEDFile()
2823 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2824 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2825 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2826 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2827 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2828 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2829 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2830 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2831 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2832 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2833 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2834 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2836 for g in mm.getGroupsOnSpecifiedLev(lev):
2837 for f in mm.getFamiliesIdsOnGroup(g):
2838 self.assertTrue(f<0)
2844 mm.setMeshAtLevel(0,m)
2845 mm.setMeshAtLevel(-1,m2)
2846 mm.setGroupsAtLevel(0,[g1,g2])
2847 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2848 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2849 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2850 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2851 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2852 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2853 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2854 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2855 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2856 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2857 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2858 mm.normalizeFamIdsMEDFile()
2859 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2860 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2861 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2862 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2863 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2864 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2865 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2866 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2867 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2868 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2869 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2870 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2871 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2872 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2873 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2874 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2875 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2876 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2878 for g in mm.getGroupsOnSpecifiedLev(lev):
2879 for f in mm.getFamiliesIdsOnGroup(g):
2880 self.assertTrue(f<0)
2884 for g in mm.getGroupsOnSpecifiedLev(1):
2885 for f in mm.getFamiliesIdsOnGroup(g):
2886 self.assertTrue(f>0)
2892 def testNonRegressionMantis22212ChangeGrpName(self):
2893 fileName="Pyfile62.med"
2894 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2895 m=MEDFileUMesh.New()
2896 m.setCoords(m2.getCoords())
2897 m.setMeshAtLevel(0,m2)
2898 m.setMeshAtLevel(-1,m1)
2899 m.setMeshAtLevel(-2,m0)
2900 m.setFamilyFieldArr(0,f2)
2901 m.setFamilyFieldArr(-1,f1)
2902 m.setFamilyFieldArr(-2,f0)
2903 m.setFamilyFieldArr(1,p)
2905 for i in range(nbOfFams):
2906 m.addFamily(fns[i],fids[i])
2909 for i in range(nbOfGrps):
2910 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2912 m.setName(m2.getName())
2913 m.setDescription(m2.getDescription())
2916 mm0=MEDFileMesh.New(fileName)
2917 mm1=MEDFileMesh.New(fileName)
2918 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2919 for name in groupNamesIni:
2920 mm1.changeGroupName(name,name+'N')
2922 mm1.write(fileName,2)
2925 mm2=MEDFileMesh.New(fileName)
2926 for name in groupNamesIni:
2927 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2928 arr0=mm0.getGroupArr(lev,name)
2929 arr2=mm2.getGroupArr(lev,name+'N')
2930 arr0.setName(name+'N')
2931 self.assertTrue(arr0.isEqual(arr2))
2937 def testInt32InMEDFileFieldStar1(self):
2938 self.internalInt32InMEDFileFieldStar1()
2940 def internalInt32InMEDFileFieldStar1(self):
2941 fname="Pyfile63.med"
2942 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2943 f1=f1.convertToIntField()
2945 mm1=MEDFileUMesh.New()
2946 mm1.setCoords(m1.getCoords())
2947 mm1.setMeshAtLevel(0,m1)
2948 mm1.setName(m1.getName())
2950 ff1=MEDFileIntField1TS()
2951 ff1.setFieldNoProfileSBT(f1)
2952 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2953 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2954 self.assertTrue(a.isEqual(f1,1e-12,0))
2956 a,b=ff1.getUndergroundDataArrayExt()
2957 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2958 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2959 ff2=MEDFileAnyTypeField1TS.New(fname)
2960 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2961 self.assertEqual(ff2.getTime(),[0,1,2.0])
2962 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2963 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2964 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2965 self.assertTrue(a.isEqual(f1,1e-12,0))
2967 c=ff2.getUndergroundDataArray() ; c*=2
2968 ff2.write(fname,0) # 2 time steps in
2969 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2970 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2971 self.assertEqual(len(ffs1),2)
2972 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2973 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2974 self.assertTrue(a.isEqual(f1,1e-12,0))
2975 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2976 self.assertTrue(a.isEqual(f1,1e-12,0))
2977 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2978 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2979 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2980 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2981 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2982 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2984 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2987 self.assertTrue(bc.isEqual(3*f1.getArray()))
2988 nf1=MEDCouplingFieldInt(ON_NODES)
2989 nf1.setTime(9.,10,-1)
2990 nf1.setMesh(f1.getMesh())
2991 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2992 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2993 nff1=MEDFileIntField1TS.New()
2994 nff1.setFieldNoProfileSBT(nf1)
2995 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2996 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2999 nf2=MEDCouplingFieldInt(ON_NODES)
3000 nf2.setTime(19.,20,-11)
3001 nf2.setMesh(f1.getMesh())
3002 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
3003 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
3004 nff2=MEDFileIntField1TS.New()
3005 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
3006 nff2.setFieldProfile(nf2,mm1,0,npfl)
3007 nff2.getFieldWithProfile(ON_NODES,0,mm1)
3008 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
3009 self.assertTrue(b.isEqual(npfl))
3010 self.assertTrue(a.isEqual(narr2))
3012 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
3013 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
3014 self.assertTrue(b.isEqual(npfl))
3015 self.assertTrue(a.isEqual(narr2))
3017 nf3=MEDCouplingFieldDouble(ON_NODES)
3018 nf3.setName("VectorFieldOnNodesDouble")
3019 nf3.setTime(29.,30,-21)
3020 nf3.setMesh(f1.getMesh())
3021 nf3.setArray(f1.getMesh().getCoords())
3022 nff3=MEDFileField1TS.New()
3023 nff3.setFieldNoProfileSBT(nf3)
3025 fs=MEDFileFields(fname)
3026 self.assertEqual(len(fs),4)
3027 ffs=[it for it in fs]
3028 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
3029 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
3030 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
3031 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
3033 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
3034 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
3035 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
3036 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
3037 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
3039 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
3040 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
3041 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
3042 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
3043 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
3044 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
3045 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
3046 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
3048 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
3049 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
3050 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
3051 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
3055 def testMEDFileFields1(self):
3056 fname="Pyfile64.med"
3057 f1=MEDCouplingFieldDouble(ON_NODES)
3058 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
3059 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
3060 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
3062 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
3064 f1.setName("Field1")
3065 ff1=MEDFileField1TS.New()
3066 ff1.setFieldNoProfileSBT(f1)
3067 self.assertEqual(ff1.getDtUnit(),"us")
3069 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3070 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3072 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3073 ff1s=MEDFileFieldMultiTS(fname,"Field1")
3074 ff1s.setName("Field2")
3076 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3077 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3078 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3079 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3080 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3081 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3082 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3083 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3086 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3088 def testMEDFileFields2(self):
3089 fname="Pyfile65.med"
3090 # to check that all is initialize
3091 MEDFileField1TS().__str__()
3092 MEDFileFieldMultiTS().__str__()
3093 # building a mesh containing 4 tri3 + 5 quad4
3094 tri=MEDCouplingUMesh("tri",2)
3095 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3096 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3097 tris = [tri.deepCopy() for i in range(4)]
3098 for i,elt in enumerate(tris): elt.translate([i,0])
3099 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3100 quad=MEDCouplingUMesh("quad",2)
3101 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3102 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3103 quads = [quad.deepCopy() for i in range(5)]
3104 for i,elt in enumerate(quads): elt.translate([5+i,0])
3105 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3106 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3107 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3109 fmts0_0=MEDFileFieldMultiTS()
3110 fmts0_1=MEDFileFieldMultiTS()
3113 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3114 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3115 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3116 f.setTime(float(i+1)+0.1,i+1,-i-1)
3117 fmts0_0.appendFieldNoProfileSBT(f)
3118 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3119 self.assertEqual(fmts0_1.getName(),name1)
3120 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3121 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3123 # components names have been modified to generate errors
3124 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3125 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3126 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3127 f1ts.setInfo(['aa [bb]','eee [dd]'])
3128 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3130 # add a mismatch of nb of compos
3132 fmts0_2=fmts0_0.deepCopy()
3133 fmts0_3=fmts0_0.deepCopy()
3134 fmts0_4=fmts0_0.deepCopy()
3135 fmts0_5=fmts0_0.shallowCpy()
3136 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)
3138 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3139 del fmts0_3[[1.1,(6,-6),9]]
3140 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3141 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3142 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3143 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3144 fmts0_7=fmts0_4[::-3]
3145 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3146 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3149 fs0.pushField(fmts0_0)
3150 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3151 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3152 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3153 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3155 fs0=MEDFileFields(fname)
3156 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3157 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3158 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3159 del fs1[["2ndField",3]]
3160 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3161 fs2=fs0[[0,"4thField"]]
3162 self.assertTrue(isinstance(fs2,MEDFileFields))
3163 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3165 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3168 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3170 def testMEDFileFields3(self):
3171 fname="Pyfile66.med"
3172 # building a mesh containing 4 tri3 + 5 quad4
3173 tri=MEDCouplingUMesh("tri",2)
3174 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3175 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3176 tris = [tri.deepCopy() for i in range(4)]
3177 for i,elt in enumerate(tris): elt.translate([i,0])
3178 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3179 quad=MEDCouplingUMesh("quad",2)
3180 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3181 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3182 quads = [quad.deepCopy() for i in range(5)]
3183 for i,elt in enumerate(quads): elt.translate([5+i,0])
3184 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3185 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3186 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3188 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3190 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3191 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3192 fmts0_0=MEDFileFieldMultiTS()
3193 fmts0_1=MEDFileFieldMultiTS()
3196 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3197 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3198 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3199 f.setTime(float(i+1)+0.1,i+1,-i-1)
3200 fmts0_0.appendFieldProfile(f,mm,0,pfl)
3201 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3202 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3203 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3206 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3207 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3208 fmts0_0.zipPflsNames()
3209 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3210 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3211 fmts0_2=fmts0_0.deepCopy()
3212 fmts0_3=fmts0_0.deepCopy()
3213 fmts0_4=fmts0_0.deepCopy()
3215 fs0.pushField(fmts0_0)
3216 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3217 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3218 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3219 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3221 fmts0_5=MEDFileFieldMultiTS()
3223 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3224 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3225 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3226 f.setTime(float(i+1)+0.1,i+1,-i-1)
3227 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3229 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3230 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3231 fs0.checkGlobsCoherency()
3236 def testSplitComponents1(self):
3237 fname="Pyfile67.med"
3238 # building a mesh containing 4 tri3 + 5 quad4
3239 tri=MEDCouplingUMesh("tri",2)
3240 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3241 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3242 tris = [tri.deepCopy() for i in range(4)]
3243 for i,elt in enumerate(tris): elt.translate([i,0])
3244 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3245 quad=MEDCouplingUMesh("quad",2)
3246 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3247 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3248 quads = [quad.deepCopy() for i in range(5)]
3249 for i,elt in enumerate(quads): elt.translate([5+i,0])
3250 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3251 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3252 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3254 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3256 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3257 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3259 fmts0_1=MEDFileFieldMultiTS()
3261 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3264 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3265 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3266 f.setTime(float(i+1)+0.1,i+1,-i-1)
3267 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3268 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3270 fs.pushField(fmts0_1)
3271 self.assertEqual(1,len(fs))
3272 l=fmts0_1.splitComponents()
3273 self.assertEqual(3,len(l))
3274 for elt in l: self.assertEqual(10,len(elt))
3275 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3277 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3280 self.assertEqual(4,len(fs))
3281 for elt in fs: self.assertEqual(10,len(elt))
3282 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3283 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3285 fs.write(fname,0) ; del fs
3287 fs1=MEDFileFields(fname)
3288 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3289 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3290 self.assertEqual(4,len(fs1))
3292 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3293 f1ts=fs1[fieldName][i]
3294 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3295 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3296 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3298 f1ts=fs1["1stField"][i]
3299 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3300 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3301 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3306 def testMEDFileFieldConvertTo1(self):
3307 fname="Pyfile68.med"
3308 # building a mesh containing 4 tri3 + 5 quad4
3309 tri=MEDCouplingUMesh("tri",2)
3310 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3311 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3312 tris = [tri.deepCopy() for i in range(4)]
3313 for i,elt in enumerate(tris): elt.translate([i,0])
3314 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3315 quad=MEDCouplingUMesh("quad",2)
3316 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3317 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3318 quads = [quad.deepCopy() for i in range(5)]
3319 for i,elt in enumerate(quads): elt.translate([5+i,0])
3320 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3321 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3322 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3323 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3325 ff0=MEDFileField1TS()
3326 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")
3327 f0.checkConsistencyLight()
3328 ff0.setFieldNoProfileSBT(f0)
3330 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3331 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3333 ff0i=ff0.convertToInt()
3334 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3335 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3337 ff1=ff0i.convertToDouble()
3338 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3339 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3341 ff0i64=ff0.convertToInt64()
3342 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3343 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3345 ff2=ff0i64.convertToDouble()
3346 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3347 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3349 del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3350 ff0=MEDFileField1TS()
3351 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")
3352 f0.checkConsistencyLight()
3353 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3354 ff0.setFieldProfile(f0,mm,0,pfl)
3355 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3356 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3358 ff0i=ff0.convertToInt()
3359 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3360 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3361 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3363 ff1=ff0i.convertToDouble()
3364 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3365 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3366 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3368 ff0i64=ff0.convertToInt64()
3369 self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3370 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3371 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3373 ff2=ff0i64.convertToDouble()
3374 self.assertTrue(isinstance(ff2,MEDFileField1TS))
3375 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3376 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3378 ff0=MEDFileFieldMultiTS()
3379 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)
3380 f0.checkConsistencyLight()
3381 ff0.appendFieldProfile(f0,mm,0,pfl)
3382 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)
3383 f0.checkConsistencyLight()
3384 ff0.appendFieldProfile(f0,mm,0,pfl)
3385 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)
3386 f0.checkConsistencyLight()
3387 ff0.appendFieldProfile(f0,mm,0,pfl)
3388 ff1=ff0.convertToInt()
3389 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3390 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3391 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3392 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3393 arr=ff1.getUndergroundDataArray(dt,it)
3394 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3396 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3401 ff1=ff1.convertToDouble()
3402 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3403 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3404 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3405 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3406 arr=ff1.getUndergroundDataArray(dt,it)
3407 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3409 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3411 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3412 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3413 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3414 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3415 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3416 arr=ff1.getUndergroundDataArray(dt,it)
3417 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3419 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3423 def testMEDFileFieldPartialLoading(self):
3424 fname="Pyfile69.med"
3426 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3428 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3429 # building a mesh containing 30 tri3 + 40 quad4
3430 tri=MEDCouplingUMesh("tri",2)
3431 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3432 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3433 tris = [tri.deepCopy() for i in range(30)]
3434 for i,elt in enumerate(tris): elt.translate([i,0])
3435 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3436 quad=MEDCouplingUMesh("quad",2)
3437 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3438 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3439 quads = [quad.deepCopy() for i in range(40)]
3440 for i,elt in enumerate(quads): elt.translate([40+i,0])
3441 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3442 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3443 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3444 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3446 ff0=MEDFileField1TS()
3447 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")
3448 f0.checkConsistencyLight()
3449 ff0.setFieldNoProfileSBT(f0)
3452 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3453 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3455 ff0=MEDFileField1TS()
3456 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")
3457 f0.checkConsistencyLight()
3458 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3459 ff0.setFieldProfile(f0,mm,0,pfl)
3460 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3461 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3464 ff0=MEDFileField1TS(fname,False)
3465 self.assertEqual(ff0.getName(),"FieldCell")
3466 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3467 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3468 heap_memory_ref=ff0.getHeapMemorySize()
3469 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3471 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3472 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3473 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3475 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3476 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3477 heap_memory_ref=ff0.getHeapMemorySize()
3478 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3480 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3481 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3482 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3484 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3485 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3486 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3487 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3489 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3490 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3491 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3492 ff0.loadArraysIfNecessary() ##
3493 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3494 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3495 heap_memory_ref=ff0.getHeapMemorySize()
3496 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3498 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3499 self.assertEqual(hmd,-800) # -50*8*2
3501 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3503 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3504 heap_memory_ref=ff0.getHeapMemorySize()
3505 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3507 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3508 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3510 fieldName="FieldCellMultiTS"
3511 ff0=MEDFileFieldMultiTS()
3513 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)
3514 f0.setTime(float(t)+0.1,t,100+t)
3515 f0.checkConsistencyLight()
3516 ff0.appendFieldNoProfileSBT(f0)
3520 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3521 heap_memory_ref=ff0.getHeapMemorySize()
3522 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3524 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3527 ffs=MEDFileFields(fname,False)
3528 heap_memory_ref=ffs.getHeapMemorySize()
3529 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3531 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3535 def testMEDFileMeshReadSelector1(self):
3536 mrs=MEDFileMeshReadSelector()
3537 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3538 mrs.__str__() ; mrs.__repr__()
3540 mrs=MEDFileMeshReadSelector(0)
3541 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())
3542 mrs=MEDFileMeshReadSelector(1)
3543 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3544 mrs=MEDFileMeshReadSelector(2)
3545 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3546 mrs=MEDFileMeshReadSelector(3)
3547 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3548 mrs=MEDFileMeshReadSelector(4)
3549 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3550 mrs=MEDFileMeshReadSelector(5)
3551 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3552 mrs=MEDFileMeshReadSelector(6)
3553 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3554 mrs=MEDFileMeshReadSelector(7)
3555 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3556 mrs=MEDFileMeshReadSelector(8)
3557 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3558 mrs=MEDFileMeshReadSelector(9)
3559 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3560 mrs=MEDFileMeshReadSelector(10)
3561 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3562 mrs=MEDFileMeshReadSelector(11)
3563 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3564 mrs=MEDFileMeshReadSelector(12)
3565 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3566 mrs=MEDFileMeshReadSelector(13)
3567 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3568 mrs=MEDFileMeshReadSelector(14)
3569 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3570 mrs=MEDFileMeshReadSelector(15)
3571 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3572 mrs=MEDFileMeshReadSelector(16)
3573 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3574 mrs=MEDFileMeshReadSelector(17)
3575 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3576 mrs=MEDFileMeshReadSelector(18)
3577 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3578 mrs=MEDFileMeshReadSelector(19)
3579 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3580 mrs=MEDFileMeshReadSelector(20)
3581 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3582 mrs=MEDFileMeshReadSelector(21)
3583 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3584 mrs=MEDFileMeshReadSelector(22)
3585 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3586 mrs=MEDFileMeshReadSelector(23)
3587 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3588 mrs=MEDFileMeshReadSelector(24)
3589 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3590 mrs=MEDFileMeshReadSelector(25)
3591 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3592 mrs=MEDFileMeshReadSelector(26)
3593 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3594 mrs=MEDFileMeshReadSelector(27)
3595 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3596 mrs=MEDFileMeshReadSelector(28)
3597 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3598 mrs=MEDFileMeshReadSelector(29)
3599 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3600 mrs=MEDFileMeshReadSelector(30)
3601 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3602 mrs=MEDFileMeshReadSelector(31)
3603 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3604 mrs=MEDFileMeshReadSelector(32)
3605 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3606 mrs=MEDFileMeshReadSelector(33)
3607 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3608 mrs=MEDFileMeshReadSelector(34)
3609 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3610 mrs=MEDFileMeshReadSelector(35)
3611 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3612 mrs=MEDFileMeshReadSelector(36)
3613 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3614 mrs=MEDFileMeshReadSelector(37)
3615 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3616 mrs=MEDFileMeshReadSelector(38)
3617 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3618 mrs=MEDFileMeshReadSelector(39)
3619 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3620 mrs=MEDFileMeshReadSelector(40)
3621 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3622 mrs=MEDFileMeshReadSelector(41)
3623 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3624 mrs=MEDFileMeshReadSelector(42)
3625 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3626 mrs=MEDFileMeshReadSelector(43)
3627 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3628 mrs=MEDFileMeshReadSelector(44)
3629 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3630 mrs=MEDFileMeshReadSelector(45)
3631 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3632 mrs=MEDFileMeshReadSelector(46)
3633 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3634 mrs=MEDFileMeshReadSelector(47)
3635 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3636 mrs=MEDFileMeshReadSelector(48)
3637 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3638 mrs=MEDFileMeshReadSelector(49)
3639 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3640 mrs=MEDFileMeshReadSelector(50)
3641 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3642 mrs=MEDFileMeshReadSelector(51)
3643 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3644 mrs=MEDFileMeshReadSelector(52)
3645 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3646 mrs=MEDFileMeshReadSelector(53)
3647 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3648 mrs=MEDFileMeshReadSelector(54)
3649 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3650 mrs=MEDFileMeshReadSelector(55)
3651 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3652 mrs=MEDFileMeshReadSelector(56)
3653 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3654 mrs=MEDFileMeshReadSelector(57)
3655 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3656 mrs=MEDFileMeshReadSelector(58)
3657 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3658 mrs=MEDFileMeshReadSelector(59)
3659 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3660 mrs=MEDFileMeshReadSelector(60)
3661 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3662 mrs=MEDFileMeshReadSelector(61)
3663 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3664 mrs=MEDFileMeshReadSelector(62)
3665 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3666 mrs=MEDFileMeshReadSelector(63)
3667 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3669 mrs=MEDFileMeshReadSelector(63)
3670 mrs.setCellFamilyFieldReading(False)
3671 self.assertEqual(mrs.getCode(),62)
3672 mrs.setCellFamilyFieldReading(True)
3673 self.assertEqual(mrs.getCode(),63)
3674 mrs.setNodeFamilyFieldReading(False)
3675 self.assertEqual(mrs.getCode(),61)
3676 mrs.setNodeFamilyFieldReading(True)
3677 self.assertEqual(mrs.getCode(),63)
3678 mrs.setCellNameFieldReading(False)
3679 self.assertEqual(mrs.getCode(),59)
3680 mrs.setCellNameFieldReading(True)
3681 self.assertEqual(mrs.getCode(),63)
3682 mrs.setNodeNameFieldReading(False)
3683 self.assertEqual(mrs.getCode(),55)
3684 mrs.setNodeNameFieldReading(True)
3685 self.assertEqual(mrs.getCode(),63)
3686 mrs.setCellNumFieldReading(False)
3687 self.assertEqual(mrs.getCode(),47)
3688 mrs.setCellNumFieldReading(True)
3689 self.assertEqual(mrs.getCode(),63)
3690 mrs.setNodeNumFieldReading(False)
3691 self.assertEqual(mrs.getCode(),31)
3692 mrs.setNodeNumFieldReading(True)
3693 self.assertEqual(mrs.getCode(),63)
3697 def testPartialReadOfMeshes(self):
3698 fname="Pyfile70.med"
3699 # building a mesh containing 4 tri3 + 5 quad4
3700 tri=MEDCouplingUMesh("tri",2)
3701 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3702 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3703 tris = [tri.deepCopy() for i in range(4)]
3704 for i,elt in enumerate(tris): elt.translate([i,0])
3705 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3706 quad=MEDCouplingUMesh("quad",2)
3707 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3708 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3709 quads = [quad.deepCopy() for i in range(5)]
3710 for i,elt in enumerate(quads): elt.translate([5+i,0])
3711 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3712 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3713 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3714 m1=m.buildDescendingConnectivity()[0]
3715 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3717 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3718 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3719 mm.setGroupsAtLevel(0,[grp0,grp1])
3720 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3721 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3722 mm.setGroupsAtLevel(-1,[grp2,grp3])
3723 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3724 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3725 mm.setGroupsAtLevel(1,[grp4,grp5])
3726 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3727 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3728 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3732 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3733 b4_ref_heap_mem=mm.getHeapMemorySize()
3734 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3735 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3736 ref_heap_mem=mm.getHeapMemorySize()
3737 # check the gain of memory using 1GTUMesh instead of UMesh
3738 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
3740 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3741 self.assertEqual(len(mm.getGroupsNames()),0)
3742 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3743 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3744 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3745 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3746 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3747 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3748 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3749 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3750 delta1=ref_heap_mem-mm.getHeapMemorySize()
3751 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3753 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3754 self.assertEqual(len(mm.getGroupsNames()),6)
3755 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3756 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3757 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3758 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3759 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3760 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3761 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3762 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3763 delta2=ref_heap_mem-mm.getHeapMemorySize()
3764 self.assertTrue(delta2<delta1)
3765 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3767 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3768 self.assertEqual(len(mm.getGroupsNames()),6)
3769 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3770 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3771 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3772 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3773 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3774 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3775 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3776 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3777 delta3=ref_heap_mem-mm.getHeapMemorySize()
3778 self.assertTrue(delta3<delta2)
3779 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3781 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3782 self.assertEqual(len(mm.getGroupsNames()),6)
3783 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3784 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3785 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3786 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3787 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3788 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3789 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3790 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3791 delta4=ref_heap_mem-mm.getHeapMemorySize()
3792 self.assertTrue(delta4<delta3)
3793 self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3795 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3796 self.assertEqual(len(mm.getGroupsNames()),6)
3797 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3798 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3799 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3800 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3801 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3802 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3803 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3804 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3805 delta5=ref_heap_mem-mm.getHeapMemorySize()
3806 self.assertTrue(delta5<delta4)
3807 self.assertEqual(delta5,0)
3810 # this test checks that setFieldProfile perform a check of the array length
3811 # compared to the profile length. This test also checks that mesh attribute of field
3812 # is not used by setFieldProfile (because across this test mesh is equal to None)
3814 def testCheckCompatibilityPfl1(self):
3815 # building a mesh containing 4 tri3 + 5 quad4
3816 tri=MEDCouplingUMesh("tri",2)
3817 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3818 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3819 tris = [tri.deepCopy() for i in range(4)]
3820 for i,elt in enumerate(tris): elt.translate([i,0])
3821 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3822 quad=MEDCouplingUMesh("quad",2)
3823 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3824 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3825 quads = [quad.deepCopy() for i in range(5)]
3826 for i,elt in enumerate(quads): elt.translate([5+i,0])
3827 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3828 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3829 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3830 m1=m.buildDescendingConnectivity()[0]
3831 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3833 f1ts=MEDFileField1TS()
3834 f=MEDCouplingFieldDouble(ON_NODES)
3835 vals=DataArrayDouble(7) ; vals.iota(1000)
3837 f.setName("anonymous") # f has no mesh it is not a bug
3838 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3839 f1ts.setFieldProfile(f,mm,0,pfl)
3841 f1ts=MEDFileField1TS()
3842 f=MEDCouplingFieldDouble(ON_NODES)
3843 vals=DataArrayDouble(8) ; vals.iota(1000)
3845 f.setName("anonymous") # f has no mesh it is not a bug
3846 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3847 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3849 f1ts=MEDFileField1TS()
3850 f=MEDCouplingFieldDouble(ON_CELLS)
3851 vals=DataArrayDouble(7) ; vals.iota(1000)
3853 f.setName("anonymous") # f has no mesh it is not a bug
3854 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3855 f1ts.setFieldProfile(f,mm,0,pfl)
3856 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3858 f1ts=MEDFileField1TS()
3859 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3860 vals=DataArrayDouble(27) ; vals.iota(1000)
3862 f.setName("anonymous") # f has no mesh it is not a bug
3863 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3865 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])
3866 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3867 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])
3869 f1ts.setFieldProfile(f,mm,0,pfl)
3870 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3871 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3872 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3873 vals=DataArrayDouble(27) ; vals.iota(1000)
3874 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3876 f1ts=MEDFileField1TS()
3877 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3878 vals=DataArrayDouble(25) ; vals.iota(1000)
3880 f.setName("anonymous") # f has no mesh it is not a bug
3881 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3882 f1ts.setFieldProfile(f,mm,0,pfl)
3883 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3884 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3886 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3887 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3889 f1ts=MEDFileField1TS()
3890 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3891 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3893 f1ts.setFieldProfile(f,mm,0,pfl)
3897 def testWRMeshWithNoCells(self):
3898 fname="Pyfile71.med"
3899 a=DataArrayDouble(4) ; a.iota()
3900 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3901 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3903 m.setMeshAtLevel(0,m00)
3904 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3905 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3909 m=MEDFileMesh.New(fname)
3910 self.assertEqual((),m.getNonEmptyLevels())
3911 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))
3912 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3913 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3917 def testWRQPolyg1(self):
3918 fname="Pyfile72.med"
3919 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3920 m.insertNextCell([0,2,1,3])
3921 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3923 ms = [m.deepCopy() for i in range(4)]
3924 for i,elt in enumerate(ms):
3925 elt.translate([float(i)*1.5,0.])
3927 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3928 m0.convertAllToPoly()
3930 ms = [m.deepCopy() for i in range(5)]
3931 for i,elt in enumerate(ms):
3932 elt.translate([float(i)*1.5,1.5])
3934 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3935 m1.convertAllToPoly()
3936 m1.convertLinearCellsToQuadratic()
3938 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3941 mm.setMeshAtLevel(0,m)
3942 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3943 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3944 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3945 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3950 mm_read=MEDFileUMesh(fname)
3951 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3952 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3953 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3954 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3956 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3958 arr0=DataArrayDouble(9) ; arr0.iota()
3959 arr1=DataArrayDouble(9) ; arr1.iota(100)
3960 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3961 f.setArray(arr) ; f.checkConsistencyLight()
3963 ff=MEDFileField1TS()
3964 ff.setFieldNoProfileSBT(f)
3967 ff_read=MEDFileField1TS(fname)
3968 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3969 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3973 def testLoadIfNecessaryOnFromScratchFields0(self):
3975 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3977 fname="Pyfile77.med"
3978 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3979 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3981 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3982 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3983 m.finishInsertingCells()
3985 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3986 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3990 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3991 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3993 f0.setName("myELNOField")
3994 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3995 f0.setArray(arrs[0])
3996 ff0.appendFieldNoProfileSBT(f0)
3999 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
4000 f0.setArray(arrs[1])
4001 ff0.appendFieldNoProfileSBT(f0)
4004 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
4005 f0.setArray(arrs[2])
4006 ff0.appendFieldNoProfileSBT(f0)
4009 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
4010 f0.setArray(arrs[3])
4011 ff0.appendFieldNoProfileSBT(f0)
4013 for i,arr in enumerate(arrs):
4014 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4015 fs[0][i].loadArraysIfNecessary()
4016 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4018 fs.loadArraysIfNecessary()
4019 for i,arr in enumerate(arrs):
4020 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4022 fs[0].loadArraysIfNecessary()
4023 for i,arr in enumerate(arrs):
4024 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4029 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
4030 """ 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.
4032 fname="Pyfile78.med"
4033 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)
4034 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4035 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
4037 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
4038 m0.insertNextCell(NORM_TETRA4,elt)
4040 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
4041 m0.insertNextCell(NORM_PYRA5,elt)
4043 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
4044 m0.insertNextCell(NORM_PENTA6,elt)
4046 m0.checkConsistency()
4047 m1=MEDCouplingUMesh(); m1.setName("mesh")
4048 m1.setMeshDimension(2);
4049 m1.allocateCells(5);
4050 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4051 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4052 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4053 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4054 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4055 m1.setCoords(coords);
4056 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
4058 m3.insertNextCell(NORM_POINT1,[2])
4059 m3.insertNextCell(NORM_POINT1,[3])
4060 m3.insertNextCell(NORM_POINT1,[4])
4061 m3.insertNextCell(NORM_POINT1,[5])
4064 mm.setMeshAtLevel(0,m0)
4065 mm.setMeshAtLevel(-1,m1)
4066 mm.setMeshAtLevel(-3,m3)
4068 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
4069 mm=MEDFileMesh.New(fname)
4071 fmts=MEDFileFieldMultiTS()
4072 f1ts=MEDFileField1TS()
4073 for lev in mm.getNonEmptyLevels():
4074 for gt in mm.getGeoTypesAtLevel(lev):
4075 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4076 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4077 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4078 f.setArray(arr) ; f.setName("f0")
4079 f1ts.setFieldNoProfileSBT(f)
4082 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4083 for lev in [0,-1,-3]:
4084 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4086 fmts.pushBackTimeStep(f1ts)
4090 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4091 fs=MEDFileFields(fname)
4092 self.assertEqual(len(fs),1)
4093 self.assertEqual(len(fs[0]),1)
4095 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),'','')])])
4096 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))
4100 def testMEDFileUMeshSetName(self):
4101 """ 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.
4102 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4104 fname="Pyfile79.med"
4105 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4107 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4108 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)
4109 m0.allocateCells(5);
4110 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4111 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4112 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4113 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4114 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4115 m0.setCoords(coords);
4116 mm.setMeshAtLevel(0,m0)
4117 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4119 m2.insertNextCell(NORM_POINT1,[2])
4120 m2.insertNextCell(NORM_POINT1,[3])
4121 m2.insertNextCell(NORM_POINT1,[4])
4122 m2.insertNextCell(NORM_POINT1,[5])
4123 mm.setMeshAtLevel(-2,m2)
4124 self.assertEqual(mm.getName(),"")
4125 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4126 mm.forceComputationOfParts()
4127 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4129 self.assertEqual(mm.getName(),"abc")
4130 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4131 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4132 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4133 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4137 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4138 fileName="Pyfile80.med"
4139 m=MEDCouplingCMesh() ; m.setName("cmesh")
4140 arr=DataArrayDouble(6) ; arr.iota()
4141 m.setCoords(arr,arr)
4142 nbCells=m.getNumberOfCells()
4143 self.assertEqual(25,nbCells)
4144 f=MEDCouplingFieldDouble(ON_CELLS)
4145 f.setName("FieldOnCell") ; f.setMesh(m)
4146 arr=DataArrayDouble(nbCells) ; arr.iota()
4150 fmts=MEDFileFieldMultiTS()
4152 for i in range(nbCells):
4153 t=(float(i)+0.1,i+1,-i-2)
4155 arr2=DataArrayDouble(nbCells)
4156 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4159 f1ts=MEDFileField1TS()
4160 f1ts.setFieldNoProfileSBT(f)
4161 fmts.pushBackTimeStep(f1ts)
4163 fmts.unloadArraysWithoutDataLoss()
4164 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))
4165 fs=MEDFileFields() ; fs.pushField(fmts)
4166 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))
4167 fs.unloadArraysWithoutDataLoss()
4168 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))
4170 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))
4171 f1ts.unloadArraysWithoutDataLoss()
4172 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))
4173 mm.write(fileName,2)
4174 fs.write(fileName,0)
4175 del m,fmts,mm,f,f1ts
4177 mm=MEDFileMesh.New(fileName)
4178 fmts=MEDFileFieldMultiTS(fileName)
4179 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))
4180 fmts.unloadArraysWithoutDataLoss()
4181 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4182 fmts.loadArraysIfNecessary()
4183 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))
4185 fs=MEDFileFields(fileName)
4186 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))
4187 fs.unloadArraysWithoutDataLoss()
4188 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4189 fs.loadArraysIfNecessary()
4190 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))
4192 f1ts=MEDFileField1TS(fileName)
4193 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))
4194 f1ts.unloadArraysWithoutDataLoss()
4195 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4196 f1ts.loadArraysIfNecessary()
4197 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))
4201 def testMEDFileUMeshLoadPart1(self):
4202 """ 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
4203 memory of the returned instance.
4205 fileName="Pyfile81.med"
4206 arr=DataArrayDouble(6) ; arr.iota()
4207 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4208 m=m.buildUnstructured()
4210 m.changeSpaceDimension(3,0.)
4211 infos=["aa [b]","cc [de]","gg [klm]"]
4212 m.getCoords().setInfoOnComponents(infos)
4213 m.checkConsistency()
4215 mm.setMeshAtLevel(0,m)
4216 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4217 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4218 mm.setMeshAtLevel(-1,m1)
4219 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])
4220 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])
4221 namesCellL0=DataArrayAsciiChar(25,16)
4222 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
4223 renumM1=DataArrayInt([3,4,0,2,1])
4224 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4225 mm.setRenumFieldArr(0,renum0)
4226 mm.setFamilyFieldArr(0,famField0)
4227 mm.setNameFieldAtLevel(0,namesCellL0)
4228 mm.setRenumFieldArr(-1,renumM1)
4229 mm.setFamilyFieldArr(-1,famFieldM1)
4230 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])
4231 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])
4232 namesNodes=DataArrayAsciiChar(36,16)
4233 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
4234 mm.setRenumFieldArr(1,renum1)
4235 mm.setFamilyFieldArr(1,famField1)
4236 mm.setNameFieldAtLevel(1,namesNodes)
4237 mm.setFamilyId("Fam7",77)
4238 mm.setFamilyId("Fam8",88)
4239 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4240 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4241 mm.write(fileName,2)
4243 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4244 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4245 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])))
4246 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)
4247 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4248 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4249 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4250 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4251 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4252 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4253 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4255 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4256 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4257 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])))
4258 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)
4259 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4260 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4261 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4262 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4263 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4264 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4265 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4267 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4268 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4269 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4270 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4271 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4272 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4273 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4274 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4275 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])))
4276 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4277 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)
4278 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4279 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4280 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4281 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4285 def testMEDFileFieldsLoadPart1(self):
4286 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4288 fileName="Pyfile82.med"
4290 compos=["aa [kg]","bbb [m/s]"]
4291 arr=DataArrayDouble(6) ; arr.iota()
4292 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4293 m=m.buildUnstructured()
4295 m.changeSpaceDimension(3,0.)
4296 infos=["aa [b]","cc [de]","gg [klm]"]
4297 m.getCoords().setInfoOnComponents(infos)
4298 m.checkConsistency()
4299 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4301 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4302 arr[:,0]=list(range(25))
4303 arr[:,1]=list(range(100,125))
4305 WriteField(fileName,f,True)
4306 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4307 f.setName("FieldNode")
4308 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4309 arr[:,0]=list(range(200,236))
4310 arr[:,1]=list(range(300,336))
4312 f.checkConsistencyLight()
4313 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4316 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4318 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4319 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4322 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4324 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4326 fs[0][0].loadArrays()
4327 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4328 arr.setInfoOnComponents(compos)
4329 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4330 fs[1][0].loadArrays()
4331 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4332 arr.setInfoOnComponents(compos)
4333 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4337 def testMEDFileWithoutCells1(self):
4338 fileName="Pyfile83.med"
4339 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4340 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4344 mm.write(fileName,2)
4346 mm=MEDFileMesh.New(fileName)
4347 self.assertEqual(mm.getName(),"mesh")
4348 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4352 def testZipCoordsWithLoadPart1(self):
4353 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4355 fileName="Pyfile84.med"
4357 compos=["aa [kg]","bbb [m/s]"]
4358 arr=DataArrayDouble(6) ; arr.iota()
4359 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4360 m=m.buildUnstructured()
4362 m.changeSpaceDimension(3,0.)
4363 infos=["aa [b]","cc [de]","gg [klm]"]
4364 m.getCoords().setInfoOnComponents(infos)
4365 m.checkConsistency()
4366 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4368 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4369 arr[:,0]=list(range(25))
4370 arr[:,1]=list(range(100,125))
4372 WriteField(fileName,f,True)
4373 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4374 f.setName("FieldNode")
4375 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4376 arr[:,0]=list(range(200,236))
4377 arr[:,1]=list(range(300,336))
4379 f.checkConsistencyLight()
4380 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4383 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4385 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4386 self.assertEqual(spd.getSlice(),slice(4,6,1))
4387 spd=mm.getPartDefAtLevel(1)
4388 self.assertEqual(spd.getSlice(),slice(4,14,1))
4389 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4390 mm.zipCoords() # <- The important line is here !
4391 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4392 self.assertEqual(spd.getSlice(),slice(4,6,1))
4393 spd=mm.getPartDefAtLevel(1)
4394 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4395 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4396 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4397 fs[0][0].loadArrays()
4398 arr=DataArrayDouble([(4,104),(5,105)])
4399 arr.setInfoOnComponents(compos)
4400 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4401 fs[1][0].loadArrays()
4402 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4403 arr.setInfoOnComponents(compos)
4404 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4405 m_ref = mm[0].deepCopy()
4406 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4408 mrs = MEDFileMeshReadSelector()
4409 mrs.setNumberOfCoordsLoadSessions(2)
4410 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4412 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4413 self.assertEqual(spd.getSlice(),slice(4,6,1))
4414 spd=mm.getPartDefAtLevel(1)
4415 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4416 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4417 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4418 fs[0][0].loadArrays()
4419 arr=DataArrayDouble([(4,104),(5,105)])
4420 arr.setInfoOnComponents(compos)
4421 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4422 fs[1][0].loadArrays()
4423 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4424 arr.setInfoOnComponents(compos)
4425 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4426 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4430 def testMEDFileCMeshSetGroupsAtLevel(self):
4431 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4433 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4435 mm=MEDFileCMesh() ; mm.setMesh(m)
4436 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4437 mm.setGroupsAtLevel(0,[grp])
4438 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4442 def testMEDFileUMeshBuildExtrudedMesh1(self):
4443 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4444 fileName="Pyfile85.med"
4447 meshName3DOut="Mesh3D"
4449 d1=DataArrayInt([0,4,20,24])
4450 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4452 a=DataArrayDouble(6) ; a.iota()
4453 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4454 m=m.buildUnstructured()
4455 d1c=d1.buildComplement(m.getNumberOfCells())
4456 m=m[d1c] ; m.zipCoords()
4457 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4459 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4460 m.setName(meshName2D)
4461 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4462 e=d.deltaShiftIndex().findIdsEqual(1)
4465 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4466 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4467 mm.setGroupsAtLevel(0,[grp0])
4468 grp1=e ; grp1.setName("grp1")
4469 mm.setGroupsAtLevel(-1,[grp1])
4470 mm.write(fileName,2)
4472 a=DataArrayDouble(3) ; a.iota()
4473 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4474 tmp.setName(meshName1D)
4475 tmp.changeSpaceDimension(3)
4476 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4478 mm1D.setMeshAtLevel(0,tmp)
4479 mm1D.write(fileName,0)
4481 mm2D=MEDFileMesh.New(fileName,meshName2D)
4482 mm1D=MEDFileMesh.New(fileName,meshName1D)
4483 m1D=mm1D.getMeshAtLevel(0)
4484 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4486 self.assertEqual(mm3D.getName(),mm2D.getName())
4487 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4488 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4489 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4490 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4491 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4492 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4493 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4494 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4495 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4496 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.)])
4497 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4498 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])
4499 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4500 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])
4501 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4502 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])
4503 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4504 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])
4505 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4506 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])
4507 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4508 d=DataArrayInt(129) ; d.iota() ; d*=3
4509 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4511 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4512 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4513 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4514 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4515 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])))
4516 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])))
4517 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])))
4518 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])))
4519 mm3D.setName("MeshExtruded")
4520 mm3D.write(fileName,0)
4523 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4525 def testMEDFileUMeshPickeling1(self):
4526 outFileName="Pyfile86.med"
4527 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)
4528 c.setInfoOnComponents(["aa","bbb"])
4529 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4530 m=MEDCouplingUMesh();
4531 m.setMeshDimension(2);
4533 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4534 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4535 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4536 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4537 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4538 m.finishInsertingCells();
4540 m.checkConsistencyLight()
4541 m1=MEDCouplingUMesh.New();
4542 m1.setMeshDimension(1);
4543 m1.allocateCells(3);
4544 m1.insertNextCell(NORM_SEG2,2,[1,4])
4545 m1.insertNextCell(NORM_SEG2,2,[3,6])
4546 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4547 m1.finishInsertingCells();
4549 m1.checkConsistencyLight()
4550 m2=MEDCouplingUMesh.New();
4551 m2.setMeshDimension(0);
4552 m2.allocateCells(4);
4553 m2.insertNextCell(NORM_POINT1,1,[1])
4554 m2.insertNextCell(NORM_POINT1,1,[3])
4555 m2.insertNextCell(NORM_POINT1,1,[2])
4556 m2.insertNextCell(NORM_POINT1,1,[6])
4557 m2.finishInsertingCells();
4559 m2.checkConsistencyLight()
4561 mm=MEDFileUMesh.New()
4562 self.assertTrue(mm.getUnivNameWrStatus())
4563 mm.setName("MyFirstMEDCouplingMEDmesh")
4564 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4568 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4570 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4571 # playing with groups
4572 g1_2=DataArrayInt.New()
4573 g1_2.setValues([1,3],2,1)
4575 g2_2=DataArrayInt.New()
4576 g2_2.setValues([1,2,3],3,1)
4578 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4579 g1_1=DataArrayInt.New()
4580 g1_1.setValues([0,1,2],3,1)
4582 g2_1=DataArrayInt.New()
4583 g2_1.setValues([0,2],2,1)
4585 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4586 g1_N=DataArrayInt.New()
4587 g1_N.setValues(list(range(8)),8,1)
4589 g2_N=DataArrayInt.New()
4590 g2_N.setValues(list(range(9)),9,1)
4592 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4593 mm.createGroupOnAll(0,"GrpOnAllCell")
4594 # check content of mm
4595 t=mm.getGroupArr(0,"G1",False)
4596 self.assertTrue(g1_2.isEqual(t));
4597 t=mm.getGroupArr(0,"G2",False)
4598 self.assertTrue(g2_2.isEqual(t));
4599 t=mm.getGroupArr(-1,"G1",False)
4600 self.assertTrue(g1_1.isEqual(t));
4601 t=mm.getGroupArr(-1,"G2",False)
4602 self.assertTrue(g2_1.isEqual(t));
4603 t=mm.getGroupArr(1,"G1",False)
4604 self.assertTrue(g1_N.isEqual(t));
4605 t=mm.getGroupArr(1,"G2",False)
4606 self.assertTrue(g2_N.isEqual(t));
4607 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4608 t=mm.getGroupArr(0,"GrpOnAllCell")
4610 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4611 mm2=pickle.loads(st)
4612 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4613 self.assertEqual(mm.getAxisType(),AX_CART)
4615 mm.setAxisType(AX_CYL)
4616 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4617 mm2=pickle.loads(st)
4618 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4619 self.assertEqual(mm2.getAxisType(),AX_CYL)
4623 def testMEDFileFieldsLoadSpecificEntities1(self):
4626 fileName="Pyfile87.med"
4630 m=MEDCouplingCMesh()
4631 arr=DataArrayDouble(nbNodes) ; arr.iota()
4633 m=m.buildUnstructured()
4636 fmts=MEDFileFieldMultiTS()
4637 for i in range(nbPdt):
4638 f=MEDCouplingFieldDouble(ON_NODES)
4640 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4642 f.setName(fieldName)
4643 f.setTime(float(i),i,0)
4644 fmts.appendFieldNoProfileSBT(f)
4647 mm=MEDFileUMesh() ; mm[0]=m
4648 fmts.write(fileName,2)
4649 mm.write(fileName,0)
4651 fs=MEDFileFields(fileName,False)
4652 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4653 fs.loadArraysIfNecessary()
4654 fs2.loadArraysIfNecessary()
4655 for i in range(nbPdt):
4656 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4658 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4659 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4660 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4661 fmts=MEDFileFieldMultiTS()
4662 for i in range(nbPdt):
4663 f=MEDCouplingFieldDouble(ON_CELLS)
4665 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4667 f.setName(fieldName)
4668 f.setTime(float(i),i,0)
4669 fmts.appendFieldNoProfileSBT(f)
4671 mm=MEDFileUMesh() ; mm[0]=m3
4673 self.assertEqual(mm.getNonEmptyLevels(),())
4675 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4676 fmts.write(fileName,2)
4677 fs=MEDFileFields(fileName,False)
4678 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4679 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4680 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4681 fs.loadArraysIfNecessary()
4682 fs2.loadArraysIfNecessary()
4683 fs3.loadArraysIfNecessary()
4684 fs4.loadArraysIfNecessary()
4685 for i in range(nbPdt):
4686 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4687 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4688 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4693 def testMEDFileLotsOfTSRW1(self):
4696 fileName="Pyfile88.med"
4697 nbPdt=300 # <- perftest = 30000
4700 maxPdt=100 # <- optimum = 500
4701 m=MEDCouplingCMesh()
4702 arr=DataArrayDouble(nbNodes) ; arr.iota()
4704 m=m.buildUnstructured()
4707 nbOfField=nbPdt//maxPdt
4709 for j in range(nbOfField):
4710 fmts=MEDFileFieldMultiTS()
4711 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4712 for i in range(s.start, s.stop, s.step):
4713 f=MEDCouplingFieldDouble(ON_NODES)
4715 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4717 f.setName("%s_%d"%(fieldName,j))
4718 f.setTime(float(i),i,0)
4719 fmts.appendFieldNoProfileSBT(f)
4724 mm=MEDFileUMesh() ; mm[0]=m
4725 fs.write(fileName,2)
4726 mm.write(fileName,0)
4728 def appendInDict(d,key,val):
4735 allFields=GetAllFieldNames(fileName)
4737 pat=re.compile("([\d]+)([\s\S]+)$")
4738 for st in allFields:
4742 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4745 appendInDict(allFieldsDict,st,'')
4749 for k in allFieldsDict:
4750 if allFieldsDict[k]!=['']:
4751 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4754 for it in allFieldsDict[k]:
4755 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4760 for ii in range(nbIter):
4761 zeResu.pushBackTimeSteps(fmts2.pop())
4764 fs2.pushField(zeResu)
4766 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4770 def testMEDFileMeshRearrangeFamIds1(self):
4771 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4772 fileName="Pyfile89.med"
4773 meshName='Maillage_2'
4775 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)])
4777 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])
4778 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])
4779 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4780 m0.setConnectivity(c0,c0i)
4783 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])
4784 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])
4785 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4786 m1.setConnectivity(c1,c1i)
4789 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])
4790 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4791 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4792 mm[-2]=m2.buildUnstructured()
4794 ref0=DataArrayInt(55) ; ref0[:]=0
4795 mm.setFamilyFieldArr(0,ref0)
4796 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]))
4797 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])
4798 mm.setFamilyFieldArr(-1,ref1)
4799 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])
4800 mm.setFamilyFieldArr(-2,ref2)
4802 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4803 mm.setFamilyId(f,fid)
4804 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4805 mm.setFamiliesOnGroup(grp,fams)
4806 mm.write(fileName,2)
4808 mm=MEDFileMesh.New(fileName)
4809 grp=mm.getGroup(-1,"Groupe_1")
4810 dai=grp.computeFetchedNodeIds()
4813 mm.rearrangeFamilies() # <- the aim of the test
4814 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4815 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4816 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4817 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4818 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])))
4819 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4820 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4821 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4822 for elt,fams in allGrps:
4823 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4824 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4825 for elt,eltId in allFams:
4826 self.assertEqual(mm.getFamilyId(elt),eltId)
4830 def testNonRegrCMeshSetFieldPfl1(self):
4831 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4832 ff=MEDFileField1TS()
4835 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4839 field=MEDCouplingFieldDouble(ON_CELLS)
4841 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4842 field.setName("Field")
4843 field.checkConsistencyLight()
4844 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4845 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4846 self.assertEqual(ff.getPfls(),())
4847 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4848 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4849 del ff,mm,field,field2,pfl
4850 # same with unstructured mesh
4851 ff=MEDFileField1TS()
4854 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4857 m=m.buildUnstructured()
4859 field=MEDCouplingFieldDouble(ON_CELLS)
4861 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4862 field.setName("Field")
4863 field.checkConsistencyLight()
4864 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4865 ff.setFieldProfile(field,mm,0,pfl)
4866 self.assertEqual(ff.getPfls(),())
4867 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4868 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4872 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4874 fileName="Pyfile90.med"
4875 fileName2="Pyfile91.med"
4876 arr=DataArrayDouble(5) ; arr.iota()
4877 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4878 m=m.buildUnstructured()
4879 d=DataArrayInt([3,7,11,15])
4882 m2=m[d.buildComplement(m.getNumberOfCells())]
4883 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4884 m.changeSpaceDimension(3,0.)
4885 arr=DataArrayDouble(3) ; arr.iota()
4886 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4887 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4888 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4889 m3D=m.buildExtrudedMesh(m1D,0)
4890 m3D.sortCellsInMEDFileFrmt()
4891 m3D.setName(meshName)
4892 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4893 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4894 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4897 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4898 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4899 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4900 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4901 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4902 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4903 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4904 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4905 mm.setGroupsAtLevel(0,[vol1,vol2])
4906 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4907 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4909 mmOut1=mm.linearToQuadratic(0,0.)
4910 mmOut1.write(fileName2,2)
4911 mmOut2=mmOut1.quadraticToLinear(0.)
4912 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4916 def testMEDFileMeshAddGroup1(self):
4917 m=MEDCouplingCMesh()
4918 arrX=DataArrayDouble(9) ; arrX.iota()
4919 arrY=DataArrayDouble(4) ; arrY.iota()
4920 m.setCoords(arrX,arrY)
4924 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4926 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4928 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4930 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4932 for grp in [grp0,grp1,grp2,grp3]:
4933 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4934 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4936 for grp in [grp0,grp1,grp2,grp3]:
4937 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4938 mm.addGroup(1,grpNode)
4939 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4940 for grp in [grp0,grp1,grp2,grp3]:
4941 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4942 for grp in [grp0,grp1,grp2,grp3]:
4943 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4944 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4945 mm.normalizeFamIdsMEDFile()
4946 for grp in [grp0,grp1,grp2,grp3]:
4947 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4948 for grp in [grp0,grp1,grp2,grp3]:
4949 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4950 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4954 def testMEDFileJoint1(self):
4955 fileName="Pyfile92.med"
4956 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4957 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4961 mm.setDescription("un maillage")
4962 mm.write(fileName,2)
4963 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4964 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4965 one_step_joint=MEDFileJointOneStep()
4966 one_step_joint.pushCorrespondence(cell_correspond)
4967 one_step_joint.pushCorrespondence(node_correspond)
4968 one_joint=MEDFileJoint()
4969 one_joint.pushStep(one_step_joint)
4970 one_joint.setLocalMeshName("maa1")
4971 one_joint.setRemoteMeshName("maa1")
4972 one_joint.setDescription("joint_description")
4973 one_joint.setJointName("joint_1")
4974 one_joint.setDomainNumber(1)
4975 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4976 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4977 self.assertEqual( one_joint.getDescription(), "joint_description")
4978 self.assertEqual( one_joint.getJointName(), "joint_1")
4979 self.assertEqual( one_joint.getDomainNumber(), 1)
4980 joints=MEDFileJoints()
4981 joints.pushJoint(one_joint);
4982 joints.write(fileName,0)
4984 jointsR=MEDFileJoints(fileName,mm.getName())
4985 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4986 jR = jointsR.getJointAtPos(0)
4987 self.assertTrue( jR.isEqual( one_joint ))
4988 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4989 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4990 jointsR.destroyJointAtPos(0)
4994 def testMEDFileJoint2(self):
4995 fileNameWr="Pyfile93.med"
4996 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4997 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
5001 mm.setDescription("un maillage")
5002 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
5003 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
5004 one_step_joint=MEDFileJointOneStep()
5005 two_step_joint=MEDFileJointOneStep()
5006 one_joint=MEDFileJoint()
5007 two_joint=MEDFileJoint()
5008 one_step_joint.pushCorrespondence(node_correspond)
5009 one_joint.pushStep(one_step_joint)
5010 two_step_joint.pushCorrespondence(cell_correspond)
5011 two_step_joint.pushCorrespondence(node_correspond)
5012 two_joint.pushStep(two_step_joint)
5013 one_joint.setLocalMeshName("maa1")
5014 one_joint.setRemoteMeshName("maa1")
5015 one_joint.setDescription("joint_description_1")
5016 one_joint.setJointName("joint_1")
5017 one_joint.setDomainNumber(1)
5018 two_joint.setLocalMeshName("maa1")
5019 two_joint.setRemoteMeshName("maa1")
5020 two_joint.setDescription("joint_description_2")
5021 two_joint.setJointName("joint_2")
5022 two_joint.setDomainNumber(2)
5023 joints=MEDFileJoints()
5024 joints.pushJoint(one_joint)
5025 joints.pushJoint(two_joint)
5026 mm.setJoints( joints )
5027 mm.write(fileNameWr,2)
5029 mm=MEDFileMesh.New(fileNameWr)
5030 self.assertEqual( mm.getNumberOfJoints(), 2)
5031 jointsR = mm.getJoints();
5032 self.assertEqual( jointsR.getMeshName(), mm.getName() )
5033 self.assertEqual( len( jointsR ), 2 )
5034 jointR1 = jointsR[0]
5035 jointR2 = jointsR[1]
5036 self.assertFalse( jointR1 is None )
5037 self.assertFalse( jointR2 is None )
5038 self.assertTrue( jointR1.isEqual( one_joint ))
5039 self.assertTrue( jointR2.isEqual( two_joint ))
5043 def testMEDFileJoint1(self):
5044 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
5045 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
5046 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
5047 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
5048 joint1st_1=MEDFileJointOneStep()
5049 joint1st_1.pushCorrespondence(cell_correspond)
5050 joint1st_1.pushCorrespondence(node_correspond)
5051 joint1st_2=MEDFileJointOneStep()
5052 joint1st_2.pushCorrespondence(cell_correspond)
5053 joint1st_2.pushCorrespondence(node_correspond)
5054 joint1st_3=MEDFileJointOneStep()
5055 joint1st_3.pushCorrespondence(node_correspond)
5056 joint1st_3.pushCorrespondence(cell_correspond)
5057 joint1st_4=MEDFileJointOneStep()
5058 joint1st_4.pushCorrespondence(cell_correspond)
5059 joint1st_5=MEDFileJointOneStep()
5060 joint1st_5.pushCorrespondence(cell_correspon2)
5061 joint1st_6=MEDFileJointOneStep()
5062 joint1st_6.pushCorrespondence(cell_correspon3)
5063 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
5064 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
5065 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
5066 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
5067 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
5068 self.assertEqual(1,joint1st_6.getNumberOfCorrespondences())
5069 joint1st_6.clearCorrespondences()
5070 self.assertEqual(0,joint1st_6.getNumberOfCorrespondences())
5071 one_joint=MEDFileJoint()
5072 one_joint.pushStep(joint1st_1)
5073 one_joint.setLocalMeshName("maa1")
5074 one_joint.setRemoteMeshName("maa2")
5075 one_joint.setDescription("joint_description")
5076 one_joint.setJointName("joint_1")
5077 one_joint.setDomainNumber(1)
5078 self.assertEqual( "maa1", one_joint.getLocalMeshName())
5079 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5080 self.assertEqual( "joint_description", one_joint.getDescription())
5081 self.assertEqual( 1, one_joint.getDomainNumber())
5082 self.assertEqual( "joint_1", one_joint.getJointName())
5083 one_joint_copy = one_joint.deepCopy()
5084 self.assertEqual( "maa1", one_joint_copy.getLocalMeshName())
5085 self.assertEqual( "maa2", one_joint_copy.getRemoteMeshName())
5086 self.assertEqual( "joint_description", one_joint_copy.getDescription())
5087 self.assertEqual( 1, one_joint_copy.getDomainNumber())
5088 self.assertEqual( "joint_1", one_joint_copy.getJointName())
5091 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5093 def testMEDFileSafeCall0(self):
5094 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5095 fname="Pyfile94.med"
5096 errfname="Pyfile94.err"
5099 # first clean file if needed
5100 if os.path.exists(fname):
5103 # second : build a file from scratch
5104 m=MEDCouplingCMesh()
5105 arr=DataArrayDouble(11) ; arr.iota()
5106 m.setCoords(arr,arr)
5111 # third : change permissions to remove write access on created file
5112 os.chmod(fname, 0o444)
5113 # four : try to append data on file -> check that it raises Exception
5114 f=MEDCouplingFieldDouble(ON_CELLS)
5117 f.setArray(DataArrayDouble(100))
5118 f.getArray()[:]=100.
5119 f.checkConsistencyLight()
5120 f1ts=MEDFileField1TS()
5121 f1ts.setFieldNoProfileSBT(f)
5123 tmp=StdOutRedirect(errfname)
5124 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5127 if os.path.exists(errfname):
5133 def testUnivStatus1(self):
5134 """ Non regression test to check the effectiveness of univ write status."""
5135 fname="Pyfile95.med"
5136 arr=DataArrayDouble(10) ; arr.iota()
5137 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5138 mm=MEDFileCMesh() ; mm.setMesh(m)
5139 mm.setUnivNameWrStatus(False) # test is here
5141 mm=MEDFileCMesh(fname)
5142 self.assertEqual(mm.getUnivName(),"")
5143 mm.setUnivNameWrStatus(True)
5145 mm=MEDFileCMesh(fname)
5146 self.assertTrue(mm.getUnivName()!="")
5150 def testEmptyMesh(self):
5151 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5153 fname = "Pyfile96.med"
5154 m = MEDCouplingUMesh('toto', 2)
5155 m.setCoords(DataArrayDouble([], 0, 2))
5156 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5157 mfu = MEDFileUMesh()
5158 mfu.setMeshAtLevel(0, m)
5160 mfu2 = MEDFileUMesh(fname)
5161 self.assertEqual('toto', mfu2.getName())
5162 lvl = mfu2.getNonEmptyLevels()
5163 self.assertEqual((), lvl)
5165 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5166 def testMEDFileUMeshPickeling2(self):
5167 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5173 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5174 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5175 mesh=MEDFileUMesh() ; mesh[0]=m
5176 m1=m.computeSkin() ; mesh[-1]=m1
5178 bary1=m1.computeCellCenterOfMass()[:,2]
5179 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5180 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5181 mesh.setGroupsAtLevel(-1,[grp1,grp2])
5183 st=pickle.dumps(mesh,2)
5185 st2=pickle.dumps(mm,2)
5186 mm2=pickle.loads(st2)
5187 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5191 def testMEDFileEquivalence1(self):
5192 """ First check of equivalence implementation in MEDFileMesh"""
5193 fileName="Pyfile97.med"
5196 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)])
5197 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5198 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])
5199 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5200 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])
5201 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5202 mm.getFamilyFieldAtLevel(-1)[:]=-2
5203 mm.getFamilyFieldAtLevel(0)[:]=0
5204 mm.addFamily("HOMARD________-1",-1)
5205 mm.addFamily("HOMARD________-2",-2)
5206 mm.addFamily("HOMARD________-3",-3)
5207 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5209 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5210 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."
5211 mm.initializeEquivalences()
5212 eqs=mm.getEquivalences()
5213 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5214 eq0.setDescription(descEq)
5215 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)])
5216 eq0.setArray(-1,corr)
5217 self.assertEqual(eq0.getCell().size(),1)
5218 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5219 eq0.getCell().clear()
5220 self.assertEqual(eq0.getCell().size(),0)
5221 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5222 self.assertEqual(eq0.getCell().size(),1)
5223 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5224 mm.killEquivalences()
5225 mm.initializeEquivalences()
5226 eqs=mm.getEquivalences()
5227 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5228 eq0.setDescription(descEq)
5230 c.setArrayForType(NORM_QUAD4,corr)
5231 self.assertEqual(eq0.getCell().size(),1)
5232 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5234 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5235 self.assertEqual(mm2.getEquivalences().size(),1)
5236 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5237 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5238 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5239 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5240 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5241 mm.write(fileName,2)
5243 mm3=MEDFileMesh.New(fileName)
5244 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5248 def testMEDFileForFamiliesPlayer1(self):
5249 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5250 fileName="Pyfile98.med"
5252 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5253 arr=DataArrayDouble(4) ; arr.iota()
5254 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5255 m=m.buildUnstructured()
5258 mm.setName(meshName)
5259 mm.setFamilyId("FAMILLE_ZERO",0)
5260 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5261 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5262 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5263 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5264 mm.setFamilyFieldArr(1,d)
5265 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5266 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5267 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5268 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5269 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5270 mm.write(fileName,2)
5271 # now read such funny file !
5272 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5273 self.assertTrue(mm.isEqual(mm2,1e-16))
5274 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5275 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5276 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5280 def testCartesianizer1(self):
5281 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5283 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5284 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5285 d0=DataArrayInt(16) ; d0[:]=0
5286 d1=DataArrayInt(9) ; d1[:]=0
5287 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5288 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5289 ref0=mm.getCoords().getHiddenCppPointer()
5290 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5291 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5292 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5293 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5294 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5295 mm.setAxisType(AX_CYL) #<- important
5296 mm2=mm.cartesianize() # the trigger
5297 self.assertEqual(mm2.getAxisType(),AX_CART)
5298 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5299 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5300 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5301 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5302 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5303 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5304 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5305 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5306 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5307 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5308 self.assertEqual(mm2.getName(),mm.getName())
5309 self.assertEqual(mm2.getDescription(),mm.getDescription())
5310 self.assertEqual(mm2.getTime(),mm.getTime())
5311 self.assertEqual(mm2.getTime(),mm.getTime())
5312 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5313 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5314 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5315 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5316 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5317 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5318 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5319 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5321 mm.setAxisType(AX_CART)
5322 mm2=mm.cartesianize() # the trigger
5323 self.assertEqual(mm2.getAxisType(),AX_CART)
5324 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5325 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5326 # CurveLinearMesh non cart
5327 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5328 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5329 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5330 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5331 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5332 mm2=mm.cartesianize() # the trigger
5333 self.assertEqual(mm2.getAxisType(),AX_CART)
5334 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5335 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5336 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5337 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5338 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5339 self.assertEqual(mm2.getName(),mm.getName())
5340 self.assertEqual(mm2.getDescription(),mm.getDescription())
5341 self.assertEqual(mm2.getTime(),mm.getTime())
5342 self.assertEqual(mm2.getTime(),mm.getTime())
5343 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5344 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5345 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5346 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5347 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5348 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5349 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5350 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5351 # CurveLinearMesh cart
5352 mm.setAxisType(AX_CART)
5353 mm2=mm.cartesianize() # the trigger
5354 self.assertEqual(mm2.getAxisType(),AX_CART)
5355 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5356 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5358 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5359 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5360 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5361 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5362 mm2=mm.cartesianize() # the trigger
5363 self.assertEqual(mm2.getAxisType(),AX_CART)
5364 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5365 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5366 self.assertEqual(mm2.getName(),mm.getName())
5367 self.assertEqual(mm2.getDescription(),mm.getDescription())
5368 self.assertEqual(mm2.getTime(),mm.getTime())
5369 self.assertEqual(mm2.getTime(),mm.getTime())
5370 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5371 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5372 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5373 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5374 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5375 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5376 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5377 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5379 mm.setAxisType(AX_CART)
5380 mm2=mm.cartesianize() # the trigger
5381 self.assertEqual(mm2.getAxisType(),AX_CART)
5382 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5383 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5387 def testCheckCoherency(self):
5388 m2 = MEDCouplingUMesh("2d", 2)
5389 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5390 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5391 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5392 mum = MEDFileUMesh()
5393 mum.setMeshAtLevel(0, m2)
5394 mum.setMeshAtLevel(-1, m1)
5395 mum.checkConsistency()
5396 mum2 = mum.deepCopy()
5399 arr = DataArrayInt([2]*4)
5400 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5401 self.assertRaises(InterpKernelException, mum.checkConsistency)
5402 mum=mum2; mum2=mum.deepCopy();
5403 arr = DataArrayInt([2]*4)
5404 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5405 self.assertRaises(InterpKernelException, mum.checkConsistency)
5406 mum=mum2; mum2=mum.deepCopy();
5407 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5408 self.assertRaises(InterpKernelException, mum.checkConsistency)
5409 mum=mum2; mum2=mum.deepCopy();
5410 arr = DataArrayAsciiChar(['tutu x']*4)
5411 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5412 self.assertRaises(InterpKernelException, mum.checkConsistency)
5415 mum=mum2; mum2=mum.deepCopy();
5416 arr = DataArrayInt([2]*2)
5417 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5418 self.assertRaises(InterpKernelException, mum.checkConsistency)
5419 mum=mum2; mum2=mum.deepCopy();
5420 arr = DataArrayInt([2]*2)
5421 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5422 self.assertRaises(InterpKernelException, mum.checkConsistency)
5423 mum=mum2; mum2=mum.deepCopy();
5424 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5425 self.assertRaises(InterpKernelException, mum.checkConsistency)
5426 mum=mum2; mum2=mum.deepCopy();
5427 arr = DataArrayAsciiChar(['tutu x']*2)
5428 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5429 self.assertRaises(InterpKernelException, mum.checkConsistency)
5432 mum=mum2; mum2=mum.deepCopy();
5433 arr = DataArrayInt([2]*5)
5434 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5435 self.assertRaises(InterpKernelException, mum.checkConsistency)
5436 mum=mum2; mum2=mum.deepCopy();
5437 arr = DataArrayInt([2]*5)
5438 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5439 self.assertRaises(InterpKernelException, mum.checkConsistency)
5440 mum=mum2; mum2=mum.deepCopy();
5441 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5442 self.assertRaises(InterpKernelException, mum.checkConsistency)
5443 mum=mum2; mum2=mum.deepCopy();
5444 arr = DataArrayAsciiChar(['tutu x']*5)
5445 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5446 self.assertRaises(InterpKernelException, mum.checkConsistency)
5449 def testCheckSMESHConsistency(self):
5450 m2 = MEDCouplingUMesh("2d", 2)
5451 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5452 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5453 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5454 mum = MEDFileUMesh()
5455 mum.setMeshAtLevel(0, m2)
5456 mum.setMeshAtLevel(-1, m1)
5457 mum.checkConsistency()
5458 mum.checkSMESHConsistency()
5459 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5460 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5461 mum.setRenumFieldArr(0, n2)
5462 mum.setRenumFieldArr(-1, n1)
5463 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5464 mum.setRenumFieldArr(-1, n1+100)
5465 mum.checkSMESHConsistency()
5469 def testClearNodeAndCellNumbers(self):
5470 m2 = MEDCouplingUMesh("2d", 2)
5471 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5472 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5473 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5474 mum = MEDFileUMesh()
5475 mum.setMeshAtLevel(0, m2)
5476 mum.setMeshAtLevel(-1, m1)
5477 mum.checkConsistency()
5478 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5479 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5480 mum.setRenumFieldArr(0, n2)
5481 mum.setRenumFieldArr(-1, n1)
5482 mum.clearNodeAndCellNumbers()
5483 mum.checkSMESHConsistency()
5487 def testCMeshSetFamilyFieldArrNull(self):
5489 fname="Pyfile99.med"
5490 arrX=DataArrayDouble([0,1,2,3])
5491 arrY=DataArrayDouble([0,1,2])
5492 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5493 mm=MEDFileCMesh() ; mm.setMesh(m)
5494 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5495 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5496 mm.setFamilyFieldArr(0,famCellIds)
5497 mm.setFamilyFieldArr(1,famNodeIds)
5499 mm=MEDFileMesh.New(fname)
5500 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5501 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5502 mm.setFamilyFieldArr(0,None)#<- bug was here
5503 mm.setFamilyFieldArr(1,None)#<- bug was here
5504 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5505 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5507 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5508 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5510 mm2=MEDFileMesh.New(fname)
5511 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5512 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5516 def testAppendFieldProfileOnIntField(self):
5517 fname="Pyfile100.med"
5518 arrX=DataArrayDouble([0,1,2,3])
5519 arrY=DataArrayDouble([0,1,2])
5520 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5524 fmts=MEDFileIntFieldMultiTS()
5526 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5527 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5528 fieldName="FieldOnCell"
5529 f.setTime(1.2,1,1) ; f.setName(fieldName)
5530 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5531 fmts.appendFieldProfile(f,mm,0,pfl)
5536 mm=MEDFileMesh.New(fname)
5537 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5538 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5539 self.assertEqual(fmts.getName(),fieldName)
5540 self.assertEqual(len(fmts),1)
5542 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5543 self.assertEqual(pfltest.getName(),pflName)
5544 self.assertEqual(ftest.getName(),fieldName)
5545 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5546 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5547 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5548 self.assertEqual(ftest2.getTime(),f.getTime())
5549 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5553 def testMEDFileFieldEasyField1(self):
5554 """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."""
5555 ## Basic test on cells on top level
5556 fname="Pyfile101.med"
5559 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5560 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5562 m.insertNextCell(NORM_TRI3,[0,1,2])
5563 m.insertNextCell(NORM_TRI3,[3,4,5])
5564 m.insertNextCell(NORM_TRI3,[6,7,8])
5565 m.insertNextCell(NORM_TRI3,[9,10,11])
5566 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5567 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5570 arr0=DataArrayDouble([10,11,12,13,100,101])
5571 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5572 f.setName(fieldName) ; f.setTime(2.,6,7)
5574 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5576 arr2=arr0+1000 ; f.setArray(arr2)
5577 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5581 mm=MEDFileMesh.New(fname)
5582 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5583 ftst0=f1ts.field(mm)
5584 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5585 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5586 ftst1=f1ts.field(mm)
5587 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5588 fmts=MEDFileFieldMultiTS(fname,fieldName)
5589 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5590 ## Basic test on nodes on top level
5591 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5592 f2.setName(fieldName)
5594 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5596 mm=MEDFileMesh.New(fname)
5597 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5598 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5599 fmts=MEDFileFieldMultiTS(fname,fieldName)
5600 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5602 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)
5603 f3.setName(fieldName) ; f3.checkConsistencyLight()
5604 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5606 mm=MEDFileMesh.New(fname)
5607 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5608 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5610 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5611 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])
5612 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)
5613 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)
5614 f4.checkConsistencyLight()
5615 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5617 mm=MEDFileMesh.New(fname)
5618 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5619 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5623 def testMEDFileFieldEasyField2(self):
5624 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5625 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."""
5626 ## Basic test on cells on top level
5627 fname="Pyfile102.med"
5630 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5631 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5633 m.insertNextCell(NORM_TRI3,[0,1,2])
5634 m.insertNextCell(NORM_TRI3,[3,4,5])
5635 m.insertNextCell(NORM_TRI3,[6,7,8])
5636 m.insertNextCell(NORM_TRI3,[9,10,11])
5637 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5638 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5641 arr0=DataArrayInt32([10,11,12,13,100,101])
5642 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5643 f.setName(fieldName) ; f.setTime(2.,6,7)
5645 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5647 arr2=arr0+1000 ; f.setArray(arr2)
5648 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5652 mm=MEDFileMesh.New(fname)
5653 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5654 ftst0=f1ts.field(mm)
5655 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5656 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5657 ftst1=f1ts.field(mm)
5658 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5659 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5660 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5661 ## Basic test on nodes on top level
5662 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5663 f2.setName(fieldName)
5665 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5667 mm=MEDFileMesh.New(fname)
5668 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5669 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5670 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5671 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5673 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)
5674 f3.setName(fieldName) ; f3.checkConsistencyLight()
5675 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5677 mm=MEDFileMesh.New(fname)
5678 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5679 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5681 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5682 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])
5683 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)
5684 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)
5685 f4.checkConsistencyLight()
5686 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5688 mm=MEDFileMesh.New(fname)
5689 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5690 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5694 def testMEDFileFieldEasyField3(self):
5695 """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."""
5696 fname="Pyfile103.med"
5699 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5700 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5702 m.insertNextCell(NORM_TRI3,[0,1,2])
5703 m.insertNextCell(NORM_TRI3,[3,4,5])
5704 m.insertNextCell(NORM_TRI3,[6,7,8])
5705 m.insertNextCell(NORM_TRI3,[9,10,11])
5706 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5707 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5709 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5711 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5712 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5716 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5717 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5719 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5720 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5721 # here f1 lying on level -1 not 0 check if "field" method detect it !
5722 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5723 f1.setMesh(mm[-1]) # -1 is very important
5725 f1.checkConsistencyLight()
5727 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5729 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5730 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5732 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5733 f3.setMesh(mm[-1]) # this line is important
5734 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)
5735 f3.setName(fieldName) ; f3.checkConsistencyLight()
5736 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5738 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5739 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5741 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5742 f4.setMesh(mm[-1]) # this line is important
5743 f4.setName(fieldName)
5744 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])
5745 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)
5746 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)
5747 f4.checkConsistencyLight()
5748 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5749 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5750 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5754 def testMEDFileFieldEasyField4(self):
5755 """ Same than testMEDFileFieldEasyField3 but with integers"""
5756 fname="Pyfile104.med"
5759 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5760 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5762 m.insertNextCell(NORM_TRI3,[0,1,2])
5763 m.insertNextCell(NORM_TRI3,[3,4,5])
5764 m.insertNextCell(NORM_TRI3,[6,7,8])
5765 m.insertNextCell(NORM_TRI3,[9,10,11])
5766 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5767 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5769 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5771 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5772 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5776 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5777 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5779 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5780 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5781 # here f1 lying on level -1 not 0 check if "field" method detect it !
5782 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5783 f1.setMesh(mm[-1]) # -1 is very important
5785 f1.checkConsistencyLight()
5787 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5789 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5790 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5792 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5793 f3.setMesh(mm[-1]) # this line is important
5794 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)
5795 f3.setName(fieldName) ; f3.checkConsistencyLight()
5796 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5798 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5799 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5801 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5802 f4.setMesh(mm[-1]) # this line is important
5803 f4.setName(fieldName)
5804 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])
5805 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)
5806 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)
5807 f4.checkConsistencyLight()
5808 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5809 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5810 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5814 def testMEDFileFieldEasyField5(self):
5815 """More and more difficult now look at how profiles are managed by "field" method."""
5816 fname="Pyfile105.med"
5819 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5820 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5822 m.insertNextCell(NORM_TRI3,[0,1,2])
5823 m.insertNextCell(NORM_TRI3,[3,4,5])
5824 m.insertNextCell(NORM_TRI3,[6,7,8])
5825 m.insertNextCell(NORM_TRI3,[9,10,11])
5826 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5827 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5830 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5831 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5833 arr0=DataArrayDouble([10,11,12,13])
5834 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5835 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5836 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5839 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5840 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5841 # more complicated -> multi level
5842 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5844 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5845 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5847 mm2[0]=m0 ; mm2[-1]=m
5849 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5851 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5852 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5856 def testExtractPart1(self):
5857 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)])
5859 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5860 m0.insertNextCell(NORM_TRI3,[8,4,3])
5861 m0.insertNextCell(NORM_TRI3,[8,9,4])
5862 m0.insertNextCell(NORM_TRI3,[7,13,8])
5863 m0.insertNextCell(NORM_TRI3,[7,12,13])
5864 m0.insertNextCell(NORM_TRI3,[0,6,1])
5865 m0.insertNextCell(NORM_TRI3,[0,5,6])
5866 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5867 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5868 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5869 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5870 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5872 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5873 m1.insertNextCell(NORM_SEG2,[10,5])
5874 m1.insertNextCell(NORM_SEG2,[5,0])
5875 m1.insertNextCell(NORM_SEG2,[0,1])
5876 m1.insertNextCell(NORM_SEG2,[1,2])
5877 m1.insertNextCell(NORM_SEG2,[2,3])
5878 m1.insertNextCell(NORM_SEG2,[3,4])
5879 m1.insertNextCell(NORM_SEG2,[4,9])
5880 m1.insertNextCell(NORM_SEG2,[9,14])
5881 m1.insertNextCell(NORM_SEG2,[14,13])
5882 m1.insertNextCell(NORM_SEG2,[13,12])
5883 m1.insertNextCell(NORM_SEG2,[12,11])
5884 m1.insertNextCell(NORM_SEG2,[11,10])
5886 mm[0]=m0 ; mm[-1]=m1
5887 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5889 tab[0]=DataArrayInt([0,2,3,4,6,7])
5890 tab[-1]=DataArrayInt([2,3,4,5,9])
5892 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5896 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5899 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5900 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5901 f0.setMesh(m0) ; f0.setName(fname0)
5902 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5903 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5904 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]))
5905 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5906 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5907 fmts.pushBackTimeStep(f1ts)
5909 mmOut=mm.extractPart(tab)
5911 fsPart0=fs.extractPart(tab,mm)
5912 self.assertEqual(len(fsPart0),1)
5914 self.assertEqual(len(fmtsP),1)
5916 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5918 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5919 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5921 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5922 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5923 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5924 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5925 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5927 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5928 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5929 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5930 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5931 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5932 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5933 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5934 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5935 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5936 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5938 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5939 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5940 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5942 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5943 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5944 for i,tt in enumerate(tss):
5945 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5946 myarr=arr0_0+i*1000.
5948 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5949 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5951 fsPart1=fs.extractPart(tab,mm)
5952 self.assertEqual(len(fsPart1),1)
5954 self.assertEqual(len(fmtsP),len(tss))
5955 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5956 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5957 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5958 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5959 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5960 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5961 self.assertEqual(fPart.getTime(),list(tt))
5966 def testSymmetryPlusAggregationMFD1(self):
5967 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5968 fname1="Pyfile106_1.med"
5969 fname2="Pyfile106_2.med"
5970 fname3="Pyfile106_3.med"
5973 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5975 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5976 mm1_0.setCoords(da1)
5977 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5978 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5979 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5980 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5981 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5983 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5984 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5986 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5987 mm1_1.setCoords(da1)
5988 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5989 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5990 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5991 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5992 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5993 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5995 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5996 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5997 for i in range(1,10):
5998 mm1.setFamilyId("F%d"%i,i)
5999 mm1.setFamilyId("FAMILLE_ZERO",0)
6000 mm1.setFamilyId("H1",100)
6001 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
6002 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
6003 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
6004 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
6007 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]"])
6009 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
6010 mm2_0.setCoords(da1)
6011 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
6012 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
6013 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
6014 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
6016 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
6017 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
6019 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
6020 mm2_1.setCoords(da1)
6021 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
6022 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
6023 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
6024 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
6025 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
6026 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
6027 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
6028 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
6030 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
6031 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
6032 for i in range(1,12):
6033 mm2.setFamilyId("G%d"%i,i+30)
6034 mm2.setFamilyId("H1",100)
6035 mm2.setFamilyId("FAMILLE_ZERO",0)
6036 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
6037 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
6038 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
6039 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
6041 mm=MEDFileUMesh.Aggregate([mm1,mm2])
6043 def CheckMesh(tester,mm):
6044 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]"])
6045 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
6046 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])))
6047 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
6048 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])))
6049 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
6050 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
6051 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
6052 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
6053 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
6054 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)]
6055 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6056 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6057 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
6058 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
6065 infoc=["dd [W]","eee [kA]"]
6067 fmts1=MEDFileFieldMultiTS()
6068 f1ts1=MEDFileField1TS()
6069 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
6070 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
6071 arr1.setInfoOnComponents(infoc)
6072 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
6073 f1_1.checkConsistencyLight()
6074 f1ts1.setFieldNoProfileSBT(f1_1)
6076 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
6077 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
6078 arr2.setInfoOnComponents(infoc)
6079 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
6080 f1_2.checkConsistencyLight()
6081 f1ts1.setFieldNoProfileSBT(f1_2)
6082 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6083 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6084 arr3.setInfoOnComponents(infoc)
6085 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6086 f1_3.checkConsistencyLight()
6087 f1ts1.setFieldNoProfileSBT(f1_3)
6088 fmts1.pushBackTimeStep(f1ts1)
6090 f1ts2=f1ts1.deepCopy()
6091 f1ts2.setTime(t2[1],t2[2],t2[0])
6092 f1ts2.getUndergroundDataArray()[:]+=2000
6093 fmts1.pushBackTimeStep(f1ts2)
6095 fmts2=MEDFileFieldMultiTS()
6096 f1ts3=MEDFileField1TS()
6097 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6098 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6099 arr4.setInfoOnComponents(infoc)
6100 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6101 f2_1.checkConsistencyLight()
6102 f1ts3.setFieldNoProfileSBT(f2_1)
6103 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6104 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6105 arr5.setInfoOnComponents(infoc)
6106 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6107 f2_2.checkConsistencyLight()
6108 f1ts3.setFieldNoProfileSBT(f2_2)
6109 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6110 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6111 arr6.setInfoOnComponents(infoc)
6112 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6113 f2_3.checkConsistencyLight()
6114 f1ts3.setFieldNoProfileSBT(f2_3)
6115 fmts2.pushBackTimeStep(f1ts3)
6117 f1ts4=f1ts3.deepCopy()
6118 f1ts4.setTime(t2[1],t2[2],t2[0])
6119 f1ts4.getUndergroundDataArray()[:]+=2000
6120 fmts2.pushBackTimeStep(f1ts4)
6123 mfd1.setMeshes(MEDFileMeshes())
6124 mfd1.getMeshes().pushMesh(mm1)
6125 mfd1.setFields(MEDFileFields())
6126 mfd1.getFields().pushField(fmts1)
6129 mfd2.setMeshes(MEDFileMeshes())
6130 mfd2.getMeshes().pushMesh(mm2)
6131 mfd2.setFields(MEDFileFields())
6132 mfd2.getFields().pushField(fmts2)
6134 mfd=MEDFileData.Aggregate([mfd1,mfd2])
6135 def CheckMFD(tester,mfd):
6136 tester.assertEqual(len(mfd.getMeshes()),1)
6137 tester.assertEqual(len(mfd.getFields()),1)
6138 CheckMesh(self,mfd.getMeshes()[0])
6139 tester.assertEqual(len(mfd.getFields()[0]),2)
6140 zeF1=mfd.getFields()[0][0]
6141 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6142 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6143 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6144 ref.renumberCells(o2n)
6145 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6146 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6147 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6148 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6149 ref.renumberCells(o2n)
6150 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6151 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6152 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6153 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6154 ref.renumberCells(o2n)
6155 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6157 zeF2=mfd.getFields()[0][1]
6158 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6159 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6160 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6161 ref.renumberCells(o2n)
6162 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6163 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6164 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6165 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6166 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6167 ref.renumberCells(o2n)
6168 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6169 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6170 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6171 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6172 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6173 ref.renumberCells(o2n)
6174 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6175 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6177 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6178 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6183 def testAggregateWithGroups(self):
6184 """ Testing MEDFileUMesh::Aggretate when groups are present. """
6185 def generate(grp_name, offset):
6186 coo = DataArrayDouble([0., 1., 2.])
6188 m = MEDCouplingCMesh("toto")
6189 m.setCoords(coo, coo)
6190 m = m.buildUnstructured()
6191 mu = MEDFileUMesh.New()
6192 mu.setMeshAtLevel(0, m)
6193 g = DataArrayInt([0])
6195 g2 = DataArrayInt([1])
6196 g2.setName("common") # make a common group for all meshes being merged
6197 mu.setGroupsAtLevel(0, [g, g2])
6200 m1 = generate("A", 0.)
6201 m2 = generate("B", 2.)
6202 mm = MEDFileUMesh.Aggregate([m1,m2])
6204 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6205 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6206 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6207 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6208 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6209 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6210 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6211 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6212 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6217 def testExtrudedMesh1(self):
6218 fname="Pyfile107.med"
6219 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6220 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6221 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6224 ex2=mm.convertToExtrudedMesh()
6225 mm2=MEDFileMesh.New(fname)
6226 ex3=mm2.convertToExtrudedMesh()
6227 self.assertTrue(ex.isEqual(ex2,1e-12))
6228 self.assertTrue(ex.isEqual(ex3,1e-12))
6231 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6233 def testWriteInto30(self):
6234 fname="Pyfile108.med"
6235 fname2="Pyfile109.med"
6236 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6237 mm=MEDFileUMesh() ; mm[0]=m
6238 mm.setFamilyId("FAMILLE_ZERO",0)
6241 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6242 mm2=MEDFileUMesh(fname)
6243 self.assertTrue(mm.isEqual(mm2,1e-12))
6246 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
6249 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6251 def testPickelizationOfMEDFileObjects1(self):
6252 fname="Pyfile110.med"
6253 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)
6254 m0=MEDCouplingUMesh("Mesh",2)
6256 m0.insertNextCell(NORM_TRI3,[1,4,2])
6257 m0.insertNextCell(NORM_TRI3,[4,5,2])
6258 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6259 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6260 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6261 m0.finishInsertingCells()
6263 m1=MEDCouplingUMesh(m0.getName(),1)
6265 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6267 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6269 m1.finishInsertingCells()
6273 m.setMeshAtLevel(0,m0)
6274 m.setMeshAtLevel(-1,m1)
6276 dt=3 ; it=2 ; tim=4.5
6277 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6278 fieldNode0.setName("fieldNode0")
6279 fieldNode0.setTime(tim,dt,it)
6280 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6281 arr=DataArrayDouble([10,11,12,13,14])
6282 fieldNode0.setArray(arr)
6283 f0=MEDFileField1TS()
6284 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6285 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6286 fieldNode1.setName("fieldNode1")
6287 fieldNode1.setTime(tim,dt,it)
6288 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6289 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6290 fieldNode1.setArray(arr1)
6291 f1=MEDFileField1TS()
6292 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6294 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6295 mfd.getMeshes().pushMesh(m)
6296 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6297 mfd.getFields().pushField(fmts)
6298 # first start gently
6301 self.assertEqual(len(mfd2.getMeshes()),1)
6302 self.assertEqual(len(mfd2.getFields()),1)
6303 self.assertEqual(len(mfd2.getFields()[0]),1)
6304 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6305 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6306 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6307 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6308 # OK now end of joke -> serialization of MEDFileData
6309 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6310 mfd3=pickle.loads(st)
6312 self.assertEqual(len(mfd3.getMeshes()),1)
6313 self.assertEqual(len(mfd3.getFields()),1)
6314 self.assertEqual(len(mfd3.getFields()[0]),1)
6315 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6316 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6317 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6318 # serialization of MEDFileFields
6319 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6320 fs4=pickle.loads(st)
6321 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6322 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6323 # serialization of MEDFileFieldMulitTS
6324 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6325 fmts5=pickle.loads(st)
6326 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6327 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6328 # serialization of MEDFileField1TS
6329 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6330 f1ts6=pickle.loads(st)
6331 ff6=f1ts6.field(mfd3.getMeshes()[0])
6332 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6333 # serialization of MEDFileMeshes
6334 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6335 ms7=pickle.loads(st)
6336 self.assertEqual(len(ms7),1)
6337 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6340 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6342 def testPickelizationOfMEDFileObjects2(self):
6344 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6345 mm=MEDFileMesh.New("MEDFileMesh5.med")
6346 self.assertTrue(isinstance(mm,MEDFileCMesh))
6347 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6348 mm2=pickle.loads(st)
6349 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6350 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6352 self.internalCurveLinearMesh1() # generates Pyfile55.med
6353 mm=MEDFileMesh.New("Pyfile55.med")
6354 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6355 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6356 mm3=pickle.loads(st)
6357 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6358 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6359 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6360 # MEDFileIntFieldMultiTS
6361 fs4=MEDFileFields("Pyfile63.med")
6362 ms4=MEDFileMeshes("Pyfile63.med")
6363 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6364 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6365 fmts5=pickle.loads(st)
6366 self.assertEqual(len(fs4[0]),len(fmts5))
6367 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6368 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6369 # MEDFileIntField1TS
6370 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6371 f1ts6=pickle.loads(st)
6372 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6373 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6375 self.internalParameters1()# generates Pyfile56.med
6376 params=MEDFileParameters("Pyfile56.med")
6377 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6378 params7=pickle.loads(st)
6379 self.assertEqual(len(params),len(params7))
6380 for i in range(len(params)):
6381 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6386 def testGlobalNumOnNodes1(self):
6387 """Test global number on nodes here. Used by partitionners."""
6388 fname="Pyfile112.med"
6389 arr=DataArrayDouble(5) ; arr.iota()
6390 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6394 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6395 d=DataArrayInt([7,8,9,2,0])
6397 mm.setGlobalNumFieldAtLevel(1,d)
6398 mm.checkConsistency()
6399 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6400 mm.checkConsistency()
6401 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6402 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6404 mm2=MEDFileMesh.New(fname)
6405 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6406 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6407 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6408 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6409 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6410 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6414 def testPartialReadOfEntities1(self):
6415 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6416 fname="Pyfile113.med"
6417 arr=DataArrayDouble(5) ; arr.iota()
6418 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6425 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6426 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6428 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6429 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6431 f1ts=MEDFileField1TS()
6432 f1ts.setFieldNoProfileSBT(f1)
6433 f1ts.setFieldNoProfileSBT(f2)
6434 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6435 f1ts_2=f1ts.deepCopy()
6436 f1ts_2.getUndergroundDataArray()[:]+=2
6437 f1ts_2.setTime(3,4,6.)
6438 fmts=MEDFileFieldMultiTS()
6439 fmts.pushBackTimeStep(f1ts)
6440 fmts.pushBackTimeStep(f1ts_2)
6445 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6446 mm=MEDFileMesh.New(fname)
6447 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)
6449 self.assertEqual(len(fs),1)
6451 self.assertEqual(len(fmts),2)
6452 ff0=fmts[0] ; ff1=fmts[1]
6453 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6454 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6455 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6456 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6460 def testFloat32InMEDFileFieldStar1(self):
6461 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6462 fname="Pyfile114.med"
6463 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6464 f1=f1.convertToFloatField()
6466 mm1=MEDFileUMesh.New()
6467 mm1.setCoords(m1.getCoords())
6468 mm1.setMeshAtLevel(0,m1)
6469 mm1.setName(m1.getName())
6471 ff1=MEDFileFloatField1TS()
6472 ff1.setFieldNoProfileSBT(f1)
6473 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6474 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6475 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6477 a,b=ff1.getUndergroundDataArrayExt()
6478 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6479 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6480 ff2=MEDFileAnyTypeField1TS.New(fname)
6481 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6482 self.assertEqual(ff2.getTime(),[0,1,2.0])
6483 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6484 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6485 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6486 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6488 c=ff2.getUndergroundDataArray() ; c*=2
6489 ff2.write(fname,0) # 2 time steps in
6490 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6491 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6492 self.assertEqual(len(ffs1),2)
6493 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6494 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6495 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6496 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6497 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6498 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6499 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6500 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6501 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6502 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6503 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6505 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6508 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6509 nf1=MEDCouplingFieldFloat(ON_NODES)
6510 nf1.setTime(9.,10,-1)
6511 nf1.setMesh(f1.getMesh())
6512 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6513 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6514 nff1=MEDFileFloatField1TS.New()
6515 nff1.setFieldNoProfileSBT(nf1)
6516 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6517 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6520 nf2=MEDCouplingFieldFloat(ON_NODES)
6521 nf2.setTime(19.,20,-11)
6522 nf2.setMesh(f1.getMesh())
6523 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6524 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6525 nff2=MEDFileFloatField1TS.New()
6526 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6527 nff2.setFieldProfile(nf2,mm1,0,npfl)
6528 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6529 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6530 self.assertTrue(b.isEqual(npfl))
6531 self.assertTrue(a.isEqual(narr2,1e-7))
6533 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6534 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6535 self.assertTrue(b.isEqual(npfl))
6536 self.assertTrue(a.isEqual(narr2,1e-7))
6538 nf3=MEDCouplingFieldDouble(ON_NODES)
6539 nf3.setName("VectorFieldOnNodesDouble")
6540 nf3.setTime(29.,30,-21)
6541 nf3.setMesh(f1.getMesh())
6542 nf3.setArray(f1.getMesh().getCoords())
6543 nff3=MEDFileField1TS.New()
6544 nff3.setFieldNoProfileSBT(nf3)
6546 fs=MEDFileFields(fname)
6547 self.assertEqual(len(fs),4)
6548 ffs=[it for it in fs]
6549 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6550 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6551 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6552 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6554 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6555 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6556 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6557 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6558 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6560 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6561 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6562 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6563 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6564 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6565 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6566 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6567 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6569 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6570 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6571 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6572 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6576 def testPenta18_1(self):
6577 """EDF8478 : Test of read/write of penta18"""
6578 fname="Pyfile115.med"
6579 arr=DataArrayDouble([
6580 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6581 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6582 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6583 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6584 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6585 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6586 m=MEDCouplingUMesh("mesh",3)
6589 m.insertNextCell(NORM_PENTA18,list(range(18)))
6590 m.checkConsistencyLight()
6592 f=MEDCouplingFieldDouble(ON_NODES)
6594 f.setName("FieldOnPenta18")
6595 f.setArray(DataArrayDouble(list(range(18))))
6596 f.checkConsistencyLight()
6598 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6600 f2=MEDCouplingFieldDouble(ON_NODES)
6602 f2.setName("FieldOnPenta18Sub")
6603 f2.setArray(DataArrayDouble(list(range(18))))
6604 f2.checkConsistencyLight()
6605 WriteField(fname,f2,True)
6607 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6608 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6609 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6613 def testFieldsLinearToQuadratic(self):
6614 fname="Pyfile117.med"
6615 arr=DataArrayDouble([0,1])
6616 m=MEDCouplingCMesh();
6617 m.setCoords(arr,arr,arr)
6618 m=m.buildUnstructured()
6620 m2.translate([2,0,0])
6621 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6625 mmq=mm.linearToQuadratic(0)
6626 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6627 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6629 f=MEDCouplingFieldDouble(ON_NODES)
6633 arr=DataArrayDouble(m3.getNumberOfNodes())
6636 f1ts=MEDFileField1TS()
6637 f1ts.setFieldNoProfileSBT(f)
6638 fmts=MEDFileFieldMultiTS()
6639 fmts.pushBackTimeStep(f1ts)
6640 f1ts_2=f1ts.deepCopy()
6641 f1ts_2.setTime(3,4,5.)
6642 f1ts_2.getUndergroundDataArray()[:]*=2.
6643 fmts.pushBackTimeStep(f1ts_2)
6646 fs2=fs.linearToQuadratic(mms,mmsq)
6647 self.myTester1(fs2,mmsq[0])
6648 # A small Write/Read and test again
6649 mms.write(fname,2) ; fs.write(fname,0)
6650 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6651 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6652 fs2=fs.linearToQuadratic(mms,mmqs)
6653 self.myTester1(fs2,mmqs[0])
6656 def myTester1(self,fs2,mmq):
6657 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)
6658 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])
6659 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])
6660 fToTest=fs2[0][0].field(mmq)
6661 self.assertEqual(fToTest.getTime(),[3.,1,2])
6662 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6663 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6664 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6665 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6666 # testing 2nd timestep
6667 fToTest=fs2[0][1].field(mmq)
6668 self.assertEqual(fToTest.getTime(),[5.,3,4])
6669 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6670 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6671 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6672 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6676 def testFieldsLinearToQuadratic2(self):
6677 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6678 GeneratePyfile18(self)
6679 fname="Pyfile118.med"
6680 arr=DataArrayDouble([0,1])
6681 m=MEDCouplingCMesh();
6682 m.setCoords(arr,arr,arr)
6683 m=m.buildUnstructured()
6685 m2.translate([2,0,0])
6686 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6688 # add a point for fun
6689 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6693 mmq=mm.linearToQuadratic(0)
6694 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6695 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6697 f=MEDCouplingFieldDouble(ON_NODES)
6701 arr=DataArrayDouble(8) ; arr.iota()
6704 f1ts=MEDFileField1TS()
6705 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6706 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6707 f1ts_2=f1ts.deepCopy()
6708 f1ts_2.setTime(3,4,5.)
6709 f1ts_2.getUndergroundDataArray()[:]*=4.
6710 fmts=MEDFileFieldMultiTS()
6711 fmts.pushBackTimeStep(f1ts)
6712 fmts.pushBackTimeStep(f1ts_2)
6715 fs2=fs.linearToQuadratic(mms,mmsq)
6716 mms.write(fname,2) ; fs.write(fname,0)
6718 self.myTester2(fs2,mmq)
6720 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6721 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6722 fs2=fs.linearToQuadratic(mms,mmqs)
6723 self.myTester2(fs2,mmq)
6724 ## More vicious add single node 16
6727 mmq=mm.linearToQuadratic(0)
6728 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6729 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6731 f=MEDCouplingFieldDouble(ON_NODES)
6735 arr=DataArrayDouble(9) ; arr.iota()
6738 f1ts=MEDFileField1TS()
6739 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6740 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6741 fmts=MEDFileFieldMultiTS()
6742 fmts.pushBackTimeStep(f1ts)
6745 fs2=fs.linearToQuadratic(mms,mmsq)
6747 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")
6748 f1tsToTest=fs2[0][0]
6749 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])
6750 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6751 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6752 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6755 def myTester2(self,fs2,mmq):
6756 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")
6757 f1tsToTest=fs2[0][0]
6758 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])
6759 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6760 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6761 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6762 fToTest=fs2[0][0].field(mmq)
6763 self.assertEqual(fToTest.getTime(),[3.,1,2])
6764 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6765 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])))
6766 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))
6767 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6769 f1tsToTest=fs2[0][1]
6770 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6771 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6772 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6773 fToTest=fs2[0][1].field(mmq)
6774 self.assertEqual(fToTest.getTime(),[5.,3,4])
6775 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6776 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])))
6777 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))
6778 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6783 def testSetFieldProfileFlatly1(self):
6784 """ 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
6786 arr=DataArrayDouble(10) ; arr.iota()
6787 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6788 m=m.buildUnstructured()
6791 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6795 f=MEDCouplingFieldDouble(ON_CELLS)
6797 arr=DataArrayDouble(m.getNumberOfCells())
6801 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6803 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6804 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6806 f1ts=MEDFileField1TS()
6807 f1ts.setFieldProfile(f,mm,0,pfl)
6808 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6809 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6810 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6812 f1ts=MEDFileField1TS()
6813 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6814 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6815 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6816 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6817 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6818 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6822 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6823 """ Here multi level groups are created"""
6824 arr=DataArrayDouble(11) ; arr.iota()
6825 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6826 m=m.buildUnstructured()
6828 m1=m.buildDescendingConnectivity()[0]
6833 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6834 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6835 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6836 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6837 ################ ajouter un groupe sur plusieurs niveau
6839 mm.addGroup(-1,grp2)
6840 mm.addGroup(0,grp0_0)
6841 mm.addGroup(-1,grp0_1)
6842 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6843 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6844 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6845 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6846 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6847 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6848 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6849 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6850 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6851 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6852 mm.removeGroupAtLevel(0,grpName)
6853 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6854 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6855 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6856 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6857 mm.removeGroupAtLevel(-1,grpName)
6858 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6859 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6860 mm.addGroup(-1,grp0_1)
6861 mm.addGroup(0,grp0_0)
6862 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6863 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6864 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6865 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6866 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6870 def testYutaka(self):
6871 """ 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...
6872 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6874 m=MEDCouplingCMesh()
6875 arr=DataArrayDouble(4) ; arr.iota()
6876 m.setCoords(arr,arr,arr)
6877 m=m.buildUnstructured()
6880 m=m.buildUnstructured()
6881 m1=m.buildDescendingConnectivity()[0]
6887 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6889 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6891 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6893 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6894 mm.addGroup(-1,grp3)
6895 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6896 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6897 mm.addNodeGroup(grp4)
6898 mm.rearrangeFamilies()
6899 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6900 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6901 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6902 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6903 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6905 for grp in [grp0,grp1,grp2,grp3,grp4]:
6906 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6911 def testContxtMger1TS(self):
6912 fname="Pyfile119.med"
6913 coo=DataArrayDouble(1000) ; coo.iota()
6914 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6916 WriteMesh(fname,m,True)
6917 f=MEDCouplingFieldDouble(ON_CELLS)
6920 arr=DataArrayDouble(m.getNumberOfCells())
6922 f.checkConsistencyLight()
6925 f.setTime(float(i),i,0)
6926 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6929 mm=MEDFileMesh.New(fname)
6930 fmts=MEDFileFieldMultiTS(fname,False)
6931 refSize=fmts.getHeapMemorySize()
6937 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6940 def testZipFamilies1(self):
6942 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6945 arr=DataArrayDouble(10) ; arr.iota()
6946 m=MEDCouplingCMesh()
6947 m.setCoords(arr,arr)
6948 m=m.buildUnstructured()
6953 for i in range(m.getNumberOfCells()):
6954 d = DataArrayInt([i])
6955 d.setName("grp%d"%i)
6959 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6960 grp_all.setName("grp_all")
6961 mm.addGroup(0,grp_all)
6962 for i in range(m.getNumberOfCells()):
6963 mm.removeGroup("grp{}".format(i))
6966 mm.zipFamilies() # the method to test
6968 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6969 self.assertEqual(len(mm.getFamiliesNames()),1)
6970 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6973 def testZipFamilies2(self):
6975 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6978 arr=DataArrayDouble(21) ; arr.iota()
6979 m=MEDCouplingCMesh()
6981 m=m.buildUnstructured()
6986 # 1 and 3 to be merged
6987 # 2 and 5 to be merged
6988 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6989 for i in range(1,9):
6990 mm.setFamilyId("Fam_{}".format(i),-i)
6991 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6992 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6993 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6995 grp0=DataArrayInt([0,1,3,8,10,19])
6996 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6997 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6998 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6999 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
7000 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
7001 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
7003 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
7004 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
7005 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
7006 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
7007 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
7010 def testMeshConvertFromMEDFileGeoType(self):
7011 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
7014 def testFieldInt64_0(self):
7016 Small basic test with I/O of field in int64.
7018 fname="Pyfile120.med"
7019 arr = DataArrayDouble([0,1])
7020 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
7021 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
7022 v = 1234567890123456
7023 f.setArray(DataArrayInt64([v]))
7027 f1ts = MEDFileInt64Field1TS()
7028 f1ts.setFieldNoProfileSBT(f)
7029 fmts = MEDFileInt64FieldMultiTS()
7030 fmts.pushBackTimeStep(f1ts)
7031 fs = MEDFileFields()
7036 mm = MEDFileMesh.New(fname)
7037 fs = MEDFileFields(fname)
7038 f = fs[0][0].field(mm)
7039 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
7040 self.assertEqual( f.getArray().getIJ(0,0) , v )
7043 def testNonRegUMeshSubParts(self):
7045 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
7047 fname = "Pyfile121.med"
7048 m0 = MEDCouplingUMesh("mesh",1)
7049 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
7050 m0.setCoords(coords)
7052 m0.insertNextCell(NORM_SEG2,[1,2])
7055 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
7056 m1.setCoords(m0.getCoords())
7057 m1.setNodalConnectivity(DataArrayInt([1,2]))
7058 m1.setName(m0.getName())
7060 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
7061 mm.zipCoords() # <- This call changes the coords and connectivity
7064 mm = MEDFileMesh.New(fname)
7065 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
7066 self.assertTrue( m0.isEqual(mm[0],1e-12) )
7071 if __name__ == "__main__":