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)
1732 def testBasicConstructors(self):
1733 GeneratePyfile18(self)
1734 fname="Pyfile18.med"
1735 TestWriteUMeshesRW1(self)
1736 m=MEDFileMesh.New(fname)
1737 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1738 m=MEDFileMesh.New(fname)
1739 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1740 m=MEDFileUMesh(fname)
1742 self.internalMEDMesh6()
1743 m=MEDFileCMesh("MEDFileMesh5.med")
1744 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1746 m=MEDFileMeshMultiTS()
1747 m=MEDFileMeshMultiTS(fname)
1748 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1750 m=MEDFileMeshes(fname)
1752 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1753 m=MEDFileFieldMultiTS()
1754 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1756 m=MEDFileFields(fname)
1758 m=MEDFileData(fname)
1760 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1761 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1762 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1763 m=MEDCouplingCMesh()
1764 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1765 m=MEDCouplingFieldTemplate(ON_NODES)
1766 m=MEDCouplingMultiFields([])
1767 m=MEDCouplingFieldOverTime([])
1770 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1772 def testBugSemiPartialField(self):
1773 fname="Pyfile46.med"
1774 m=MEDLoaderDataForTest.build2DMesh_3()
1775 m=m[:10] ; m.setName("mesh")
1776 f=m.getMeasureField(False)
1777 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1779 f.setName("SemiPartialField")
1781 f1=f[:6] ; f1.getMesh().setName(m.getName())
1782 f2=f[6:] ; f2.getMesh().setName(m.getName())
1784 mm=MEDFileUMesh.New()
1785 mm.setMeshAtLevel(0,m)
1786 ff=MEDFileField1TS.New()
1787 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1791 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1792 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1793 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1795 fread.checkConsistencyLight()
1796 fread2.checkConsistencyLight()
1797 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1798 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1802 def testUnPolyze1(self):
1803 fname="Pyfile47.med"
1804 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1805 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]
1806 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1807 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]]))
1809 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1810 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1811 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1812 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1813 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1814 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1815 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1816 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1818 mm.setRenumFieldArr(0,None)
1819 mm.setFamilyFieldArr(-1,None)
1823 def testUnPolyze2(self):
1824 fname="Pyfile48.med"
1825 mfd=MEDFileData.New()
1826 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1827 meshes=MEDFileMeshes.New()
1829 mfd.setMeshes(meshes)
1830 fields=MEDFileFields.New()
1831 mfd.setFields(fields)
1832 ff=MEDFileFieldMultiTS.New()
1833 fields.pushField(ff)
1835 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1836 f0_0.setTime(9.5,3,4)
1837 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1839 f0_0.setMesh(mm.getMeshAtLevel(0))
1840 ff.appendFieldNoProfileSBT(f0_0)
1841 ff0=ff.getTimeStepAtPos(0)
1842 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1843 f0_1.setTime(9.5,3,4)
1844 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1845 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1846 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1848 ff0.setFieldProfile(f0_1,mm,0,pfl)
1849 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1850 f0_2.setTime(9.5,3,4)
1851 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1852 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
1853 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1855 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1856 mfd.getFields().shallowCpyGlobs(ff0)
1858 mfd.unPolyzeMeshes()
1860 fmts=mfd.getFields()[0]
1861 self.assertEqual(fmts.getNumberOfTS(),1)
1862 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1863 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1864 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))])
1865 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1866 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1867 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1868 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1869 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1870 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1871 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1872 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))
1873 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1874 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1875 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1876 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1877 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1878 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])
1879 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1880 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1881 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1882 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])
1883 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1889 def testGaussWriteOnPfl1(self):
1890 fname="Pyfile49.med"
1891 fname2="Pyfile50.med"
1892 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1893 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1894 mQ8.allocateCells(1)
1895 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1896 mQ8.finishInsertingCells()
1897 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1898 mQ4.allocateCells(1)
1899 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1900 mQ4.finishInsertingCells()
1901 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1902 mT3.allocateCells(1)
1903 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1904 mT3.finishInsertingCells()
1906 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.]]
1907 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1908 ms[:]=(elt.deepCopy() for elt in ms)
1909 for m,t in zip(ms,tr):
1910 d=m.getCoords() ; d+= t
1912 m=MEDCouplingUMesh.MergeUMeshes(ms)
1914 m2=m[:13] ; m2.setName(m.getName())
1915 ### 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.
1916 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1917 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1920 da=DataArrayDouble(34) ; da.iota(3.)
1922 f.setName("fieldCellOnPflWithoutPfl")
1923 fInvalid=f.deepCopy()
1924 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])
1925 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])
1926 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])
1927 f.checkConsistencyLight()
1928 fInvalid2=fInvalid.deepCopy()
1929 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1932 mm.setMeshAtLevel(0,m)
1935 f1ts=MEDFileField1TS.New()
1936 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1937 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1938 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1939 f1ts.setFieldProfile(f,mm,0,pfl)
1942 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1943 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1944 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1945 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1946 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1947 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1948 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1949 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1951 dataRead=MEDFileData.New(fname)
1952 mRead=dataRead.getMeshes()[0]
1953 f1tsRead=dataRead.getFields()[0][0]
1954 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1955 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1956 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1957 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1958 f2_bis.checkConsistencyLight()
1959 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1961 WriteField(fname2,f,True)
1962 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1963 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1964 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1965 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1966 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1967 m2=m[pfl] ; m2.setName(m.getName())
1970 da=DataArrayDouble(35) ; da.iota(3.)
1972 f.setName("fieldCellOnPflWithoutPfl2")
1973 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1974 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])
1975 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])
1976 f.checkConsistencyLight()
1979 mm.setMeshAtLevel(0,m)
1981 f1ts=MEDFileField1TS.New()
1982 f1ts.setFieldProfile(f,mm,0,pfl)
1983 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1984 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1985 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1986 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1988 dataRead=MEDFileData.New(fname)
1989 mRead=dataRead.getMeshes()[0]
1990 f1tsRead=dataRead.getFields()[0][0]
1991 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1992 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1993 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1994 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1995 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1996 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1997 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1999 WriteField(fname2,f,True)
2000 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2001 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2002 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2003 ## Use case 3 : no pfl but creation of pfls due to gauss pts
2004 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2007 da=DataArrayDouble(60) ; da.iota(3.)
2009 f.setName("fieldCellWithoutPfl")
2010 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])
2011 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])
2012 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])
2013 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])
2014 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])
2015 f.checkConsistencyLight()
2017 mm.setMeshAtLevel(0,m)
2018 f1ts=MEDFileField1TS.New()
2019 f1ts.setFieldNoProfileSBT(f)
2020 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2021 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2022 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2023 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2024 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2028 dataRead=MEDFileData.New(fname)
2029 mRead=dataRead.getMeshes()[0]
2030 f1tsRead=dataRead.getFields()[0][0]
2031 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2032 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2033 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2034 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2035 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2036 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2038 WriteField(fname2,f,True)
2039 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2040 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2041 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2044 # Testing profile on nodes when the profile is identity but not on all nodes.
2046 def testMEDFieldPflOnNode1(self):
2047 fname="Pyfile51.med"
2048 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)
2049 m0=MEDCouplingUMesh("Mesh",2)
2051 m0.insertNextCell(NORM_TRI3,[1,4,2])
2052 m0.insertNextCell(NORM_TRI3,[4,5,2])
2053 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2054 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2055 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2056 m0.finishInsertingCells()
2058 m1=MEDCouplingUMesh(m0.getName(),1)
2060 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2062 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2064 m1.finishInsertingCells()
2068 m.setMeshAtLevel(0,m0)
2069 m.setMeshAtLevel(-1,m1)
2071 dt=3 ; it=2 ; tim=4.5
2072 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2073 fieldNode0.setName("fieldNode0")
2074 fieldNode0.setTime(tim,dt,it)
2075 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2076 arr=DataArrayDouble([10,11,12,13,14])
2077 fieldNode0.setArray(arr)
2078 f0=MEDFileField1TS()
2079 f0.setFieldProfile(fieldNode0,m,0,pfl0)
2080 m.write(fname,2) ; f0.write(fname,0)
2081 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2082 fieldNode1.setName("fieldNode1")
2083 fieldNode1.setTime(tim,dt,it)
2084 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2085 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2086 fieldNode1.setArray(arr1)
2087 f1=MEDFileField1TS()
2088 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2091 ## Reading from file
2092 m=MEDFileMesh.New(fname)
2093 m0=m.getMeshAtLevel(0)
2094 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2095 fieldNode0.setMesh(m00)
2096 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2097 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2098 ff0_1.checkConsistencyLight()
2099 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2100 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2101 ff0_2.checkConsistencyLight()
2102 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2103 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2104 ff0_3.checkConsistencyLight()
2105 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2106 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2107 ff0_4.checkConsistencyLight()
2108 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2109 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2110 m1=m.getMeshAtLevel(-1)
2111 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2112 fieldNode1.setMesh(m10)
2113 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2114 ff1_1.checkConsistencyLight()
2115 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2116 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2117 ff1_2.checkConsistencyLight()
2118 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2119 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2120 ff1_3.checkConsistencyLight()
2121 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2122 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2123 ff1_4.checkConsistencyLight()
2124 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2125 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]
2126 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]
2127 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]
2128 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2129 arr_r.setName(fieldNode1.getArray().getName())
2130 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2131 pfl1_r.setName(pfl1.getName())
2132 self.assertTrue(pfl1_r.isEqual(pfl1))
2135 # Testing profile on nodes when the profile is identity but not on all nodes.
2137 def testMEDFieldPflOnCell1(self):
2138 fname="Pyfile52.med"
2139 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)
2140 m0=MEDCouplingUMesh("Mesh",2)
2142 m0.insertNextCell(NORM_TRI3,[1,4,2])
2143 m0.insertNextCell(NORM_TRI3,[4,5,2])
2144 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2145 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2146 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2147 m0.finishInsertingCells()
2149 m1=MEDCouplingUMesh(m0.getName(),1)
2151 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2153 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2155 m1.finishInsertingCells()
2159 m.setMeshAtLevel(0,m0)
2160 m.setMeshAtLevel(-1,m1)
2162 dt=3 ; it=2 ; tim=4.5
2163 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2164 fieldCell0.setName("fieldCell0")
2165 fieldCell0.setTime(tim,dt,it)
2166 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2167 arr=DataArrayDouble([10,11,12])
2168 fieldCell0.setArray(arr)
2169 f0=MEDFileField1TS()
2170 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2171 m.write(fname,2) ; f0.write(fname,0)
2172 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2173 fieldCell1.setName("fieldCell1")
2174 fieldCell1.setTime(tim,dt,it)
2175 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2176 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2177 fieldCell1.setArray(arr1)
2178 f1=MEDFileField1TS()
2179 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2182 ## Reading from file
2183 m=MEDFileMesh.New(fname)
2184 m0=m.getMeshAtLevel(0)
2185 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2186 fieldCell0.setMesh(m00)
2187 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2188 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2189 ff0_1.checkConsistencyLight()
2190 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2191 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2192 ff0_2.checkConsistencyLight()
2193 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2194 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2195 ff0_3.checkConsistencyLight()
2196 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2197 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2198 ff0_4.checkConsistencyLight()
2199 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2200 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2201 m1=m.getMeshAtLevel(-1)
2202 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2203 fieldCell1.setMesh(m10)
2204 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2205 ff1_1.checkConsistencyLight()
2206 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2207 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2208 ff1_2.checkConsistencyLight()
2209 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2210 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2211 ff1_3.checkConsistencyLight()
2212 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2213 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2214 ff1_4.checkConsistencyLight()
2215 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2216 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]
2217 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]
2218 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]
2219 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2220 arr_r.setName(fieldCell1.getArray().getName())
2221 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2222 pfl1_r.setName(pfl1.getName())
2223 self.assertTrue(pfl1_r.isEqual(pfl1))
2227 def testMEDFileUMeshZipCoords1(self):
2229 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2230 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])
2231 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2232 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2233 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2234 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2235 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2236 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2237 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2238 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2239 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2240 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2242 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2243 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2244 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2245 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2246 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2247 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2248 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2249 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2250 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2254 def testMEDUMeshAddNodeGroup1(self):
2255 fname="Pyfile53.med"
2257 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2258 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])
2259 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2260 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2261 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2262 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2263 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2266 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2267 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2268 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2269 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2270 mm.setFamilyId("MyFam",2)
2271 mm.setFamilyId("MyOtherFam",3)
2272 mm.setFamilyId("MyOther-1",-1)
2273 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2274 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2276 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2278 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2279 mm.addNodeGroup(daTest)
2280 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2281 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
2283 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2284 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2286 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2287 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2288 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2289 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2291 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2292 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2293 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2294 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2295 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2296 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2298 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2299 da=DataArrayInt([3,12]) ; da.setName("grp0")
2300 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2302 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2304 mm=MEDFileMesh.New(fname)
2305 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2306 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2307 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2308 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2310 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2311 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2312 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2313 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2314 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2315 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2317 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2318 da=DataArrayInt([3,12]) ; da.setName("grp0")
2319 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2321 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2325 def testMEDUMeshAddGroup1(self):
2326 fname="Pyfile54.med"
2328 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2329 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2331 m0.insertNextCell(NORM_TRI3,[1,2,1])
2334 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2337 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2339 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2340 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2341 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2342 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2343 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2346 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2347 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2348 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2349 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2350 mm.setFamilyId("MyFam",2)
2351 mm.setFamilyId("MyOtherFam",3)
2352 mm.setFamilyId("MyOther-1",-1)
2353 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2354 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2356 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2357 mm.addGroup(0,daTest)
2358 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2359 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2360 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2361 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2363 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2364 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2365 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2366 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2367 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2368 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2370 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2371 da=DataArrayInt([3,12]) ; da.setName("grp0")
2372 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2374 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2376 mm=MEDFileMesh.New(fname)
2377 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2378 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2379 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2380 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2382 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2383 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2384 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2385 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2386 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2387 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2389 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2390 da=DataArrayInt([3,12]) ; da.setName("grp0")
2391 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2393 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2397 def testHeapMem1(self):
2398 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2400 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2402 m=MEDCouplingCMesh()
2403 arr=DataArrayDouble(10,1) ; arr.iota(0)
2404 m.setCoords(arr,arr)
2405 m=m.buildUnstructured()
2407 f=m.getMeasureField(False)
2408 cooMem = 100 * 2 * 8
2409 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2410 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2411 meshMem = cooMem + nodalMem + indexMem
2412 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2413 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2414 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2417 mm.setMeshAtLevel(0,m)
2418 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2419 ff=MEDFileField1TS()
2420 ff.setFieldNoProfileSBT(f)
2421 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2423 fff=MEDFileFieldMultiTS()
2424 fff.appendFieldNoProfileSBT(f)
2425 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2427 fff.appendFieldNoProfileSBT(f)
2428 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2429 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2432 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2433 fff.appendFieldProfile(f2,mm,0,pfl)
2434 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2435 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2436 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2439 def internalCurveLinearMesh1(self):
2440 fname="Pyfile55.med"
2441 mesh=MEDCouplingCurveLinearMesh();
2442 mesh.setTime(2.3,4,5);
2443 mesh.setTimeUnit("us");
2444 mesh.setName("Example of Cuve linear mesh");
2445 mesh.setDescription("buildCLMesh");
2446 a1=DataArrayDouble(3*20,1);
2447 a1.iota(7.) ; a1.rearrange(3);
2449 mesh.setNodeGridStructure([4,5]);
2450 mesh.checkConsistencyLight();
2452 m=MEDFileCurveLinearMesh()
2454 d=DataArrayInt(20) ; d.iota(4)
2455 m.setFamilyFieldArr(1,d)
2456 d3=DataArrayInt(20) ; d3.iota(400)
2457 m.setRenumFieldArr(1,d3)
2458 d2=DataArrayInt(12) ; d2.iota(40)
2459 m.setFamilyFieldArr(0,d2)
2460 d4=DataArrayInt(21) ; d4.iota(4000)
2461 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2463 m.setRenumFieldArr(1,d4)
2466 m1=MEDFileCurveLinearMesh(fname)
2468 self.assertTrue(mm.isEqual(mesh,1e-12))
2469 self.assertEqual(mm.getSpaceDimension(),3)
2470 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2472 m1=MEDFileMesh.New(fname)
2473 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2474 self.assertTrue(isinstance(m1.getUnivName(),str))
2475 self.assertTrue(len(m1.getUnivName())!=0)
2476 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2480 def testCurveLinearMesh1(self):
2481 self.internalCurveLinearMesh1()
2484 def testParameters1(self):
2485 self.internalParameters1()
2487 def internalParameters1(self):
2488 fname="Pyfile56.med"
2489 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2490 mm=MEDFileCMesh() ; mm.setMesh(m)
2491 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2493 p=MEDFileParameters()
2494 data.setParams(p) ; data.setMeshes(ms)
2495 pts=MEDFileParameterMultiTS()
2496 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2497 pts.appendValue(1,2,3.4,567.89)
2498 pts.appendValue(2,3,5.6,999.123)
2499 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2500 p.pushParam(pts) ; p.pushParam(pts2)
2502 p2=MEDFileParameters(fname)
2503 self.assertTrue(p.isEqual(p2,1e-14)[0])
2504 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2506 pts4=pts2.deepCopy()
2507 pts3=pts2.deepCopy()
2508 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2509 pts2.eraseTimeStepIds([0])
2510 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2512 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2513 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2514 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2515 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2516 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2518 self.assertTrue(p.isEqual(p2,1e-14)[0])
2519 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2520 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2521 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2522 self.assertEqual(p.getParamsNames(),('A','B'))
2523 ptsr=MEDFileParameterMultiTS(fname,"B")
2524 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2525 ptsr=MEDFileParameterMultiTS(fname)
2526 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2527 p1tsr=MEDFileParameterDouble1TS(fname)
2528 self.assertEqual(p1tsr.getName(),"A")
2529 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2530 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2531 self.assertEqual(p1tsr.getName(),"B")
2532 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2533 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2534 self.assertEqual(p1tsr.getName(),"B")
2535 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2536 data2=MEDFileData(fname)
2537 self.assertEqual(2,data2.getNumberOfParams())
2538 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2542 def testNamesOnCellAndNodesInMeshes1(self):
2543 fname="Pyfile58.med"
2544 fname2="Pyfile59.med"
2545 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2546 m1=m.buildDescendingConnectivity()[0]
2547 m1.sortCellsInMEDFileFrmt()
2550 mm.setMeshAtLevel(0,m)
2551 mm.setMeshAtLevel(-1,m1)
2552 namesCellL0=DataArrayAsciiChar(6,16)
2553 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2554 mm.setNameFieldAtLevel(0,namesCellL0)
2555 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2556 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2557 mm.setNameFieldAtLevel(-1,namesCellL1)
2558 namesNodes=namesCellL1.subArray(4,16)
2559 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2560 mm.setNameFieldAtLevel(1,namesNodes)
2563 mmr=MEDFileMesh.New(fname)
2564 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2565 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2566 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2567 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2568 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2569 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2570 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2571 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2573 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2574 # remove names on nodes
2575 mmCpy.setNameFieldAtLevel(1,None)
2576 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2577 mm.setNameFieldAtLevel(1,None)
2578 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2579 mm.setNameFieldAtLevel(-1,None)
2581 mmr=MEDFileMesh.New(fname)
2582 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2583 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2584 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2586 c=MEDCouplingCMesh()
2587 arr=DataArrayDouble([0.,1.1,2.3])
2588 c.setCoords(arr,arr)
2592 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2593 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2595 ccr=MEDFileMesh.New(fname2)
2596 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2597 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2598 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2599 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2600 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2601 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2602 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2604 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2608 def testToExportInExamples1(self):
2609 m=MEDCouplingCMesh()
2610 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2611 m.setCoords(arr,arr)
2612 m=m.buildUnstructured() ; m.setName("mesh")
2613 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2614 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2617 mm.setMeshAtLevel(0,m)
2618 mm.setMeshAtLevel(-1,m2)
2619 mm.setGroupsAtLevel(0,[grp1,grp2])
2620 mm.write("example.med",2)
2622 m0=mm.getMeshAtLevel(0)
2623 m1=mm.getMeshAtLevel(-1)
2624 grp1=mm.getGroupArr(0,"grp1")
2625 grp2=mm.getGroupArr(0,"grp2")
2627 whichGrp=DataArrayInt(m0.getNumberOfCells())
2628 whichGrp.fillWithValue(-1)
2629 for grpId,grp in enumerate(grps):
2632 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2633 e,f=a.areCellsIncludedIn(m1,2)
2635 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2636 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2637 c2.transformWithIndArr(whichGrp)
2638 splitOfM1=len(grps)*[None]
2639 for grpId,grp in enumerate(grps):
2640 tmp=c2.findIdsEqual(grpId)
2641 splitOfM1[grpId]=tmp
2643 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2644 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2648 def testBugCorrection1(self):
2651 self.assertEqual(fs[0],None)
2652 self.assertEqual(3,len(fs))
2656 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2657 f1Name="Pyfile60.med"
2658 f2Name="Pyfile61.med"
2659 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2661 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2663 # reading and compare
2664 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2665 for mn in d1.getMeshes().getMeshesNames():
2666 m1=d1.getMeshes()[mn]
2667 m2=d2.getMeshes()[mn]
2668 for lev in m1.getNonEmptyLevels():
2669 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2670 for grpName in grpsNames:
2671 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2675 for fieldn in d1.getFields().getFieldsNames():
2676 f1=d1.getFields()[fieldn]
2677 f2=d2.getFields()[fieldn]
2678 for it,order,tim in f1.getTimeSteps():
2681 if len(f1t.getPflsReallyUsed())!=0:
2683 for lev in f1t.getNonEmptyLevels()[1]:
2684 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2685 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2686 self.assertTrue(pfl1.isEqual(pfl2))
2687 self.assertTrue(arr1.isEqual(arr2,1e-10))
2692 for lev in f1t.getNonEmptyLevels()[1]:
2693 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2694 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2695 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2703 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2704 m=MEDCouplingCMesh()
2705 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2706 m.setCoords(arr,arr,arr)
2707 m=m.buildUnstructured()
2708 m2=m.buildDescendingConnectivity()[0]
2710 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2711 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2712 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2713 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2714 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2715 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2717 mm.setMeshAtLevel(0,m)
2718 mm.setGroupsAtLevel(0,[g1,g2])
2719 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2720 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2721 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2722 mm.normalizeFamIdsMEDFile()
2723 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2724 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2725 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2726 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2727 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2728 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2729 for g in mm.getGroupsOnSpecifiedLev(0):
2730 for f in mm.getFamiliesIdsOnGroup(g):
2731 self.assertTrue(f<0)
2736 mm.setMeshAtLevel(0,m)
2737 mm.setMeshAtLevel(-1,m2)
2738 mm.setGroupsAtLevel(0,[g1,g2])
2739 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2740 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2741 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2742 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2743 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2744 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2745 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2746 mm.normalizeFamIdsMEDFile()
2747 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2748 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2749 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2750 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2751 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2752 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2753 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2754 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2755 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2756 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2757 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2758 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2760 for g in mm.getGroupsOnSpecifiedLev(lev):
2761 for f in mm.getFamiliesIdsOnGroup(g):
2762 self.assertTrue(f<0)
2768 mm.setMeshAtLevel(0,m)
2769 mm.setMeshAtLevel(-1,m2)
2770 mm.setGroupsAtLevel(0,[g1,g2])
2771 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2772 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2773 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2774 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2775 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2776 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2777 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2778 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2779 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2780 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2781 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2782 mm.normalizeFamIdsMEDFile()
2783 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2784 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2785 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2786 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2787 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2788 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2789 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2790 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2791 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2792 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2793 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2794 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2795 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2796 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2797 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2798 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2799 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2800 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2802 for g in mm.getGroupsOnSpecifiedLev(lev):
2803 for f in mm.getFamiliesIdsOnGroup(g):
2804 self.assertTrue(f<0)
2808 for g in mm.getGroupsOnSpecifiedLev(1):
2809 for f in mm.getFamiliesIdsOnGroup(g):
2810 self.assertTrue(f>0)
2816 def testNonRegressionMantis22212ChangeGrpName(self):
2817 fileName="Pyfile62.med"
2818 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2819 m=MEDFileUMesh.New()
2820 m.setCoords(m2.getCoords())
2821 m.setMeshAtLevel(0,m2)
2822 m.setMeshAtLevel(-1,m1)
2823 m.setMeshAtLevel(-2,m0)
2824 m.setFamilyFieldArr(0,f2)
2825 m.setFamilyFieldArr(-1,f1)
2826 m.setFamilyFieldArr(-2,f0)
2827 m.setFamilyFieldArr(1,p)
2829 for i in range(nbOfFams):
2830 m.addFamily(fns[i],fids[i])
2833 for i in range(nbOfGrps):
2834 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2836 m.setName(m2.getName())
2837 m.setDescription(m2.getDescription())
2840 mm0=MEDFileMesh.New(fileName)
2841 mm1=MEDFileMesh.New(fileName)
2842 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2843 for name in groupNamesIni:
2844 mm1.changeGroupName(name,name+'N')
2846 mm1.write(fileName,2)
2849 mm2=MEDFileMesh.New(fileName)
2850 for name in groupNamesIni:
2851 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2852 arr0=mm0.getGroupArr(lev,name)
2853 arr2=mm2.getGroupArr(lev,name+'N')
2854 arr0.setName(name+'N')
2855 self.assertTrue(arr0.isEqual(arr2))
2861 def testInt32InMEDFileFieldStar1(self):
2862 self.internalInt32InMEDFileFieldStar1()
2864 def internalInt32InMEDFileFieldStar1(self):
2865 fname="Pyfile63.med"
2866 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2867 f1=f1.convertToIntField()
2869 mm1=MEDFileUMesh.New()
2870 mm1.setCoords(m1.getCoords())
2871 mm1.setMeshAtLevel(0,m1)
2872 mm1.setName(m1.getName())
2874 ff1=MEDFileIntField1TS()
2875 ff1.setFieldNoProfileSBT(f1)
2876 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2877 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2878 self.assertTrue(a.isEqual(f1,1e-12,0))
2880 a,b=ff1.getUndergroundDataArrayExt()
2881 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2882 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2883 ff2=MEDFileAnyTypeField1TS.New(fname)
2884 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2885 self.assertEqual(ff2.getTime(),[0,1,2.0])
2886 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2887 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2888 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2889 self.assertTrue(a.isEqual(f1,1e-12,0))
2891 c=ff2.getUndergroundDataArray() ; c*=2
2892 ff2.write(fname,0) # 2 time steps in
2893 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2894 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2895 self.assertEqual(len(ffs1),2)
2896 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2897 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2898 self.assertTrue(a.isEqual(f1,1e-12,0))
2899 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2900 self.assertTrue(a.isEqual(f1,1e-12,0))
2901 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2902 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2903 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2904 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2905 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2906 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2908 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2911 self.assertTrue(bc.isEqual(3*f1.getArray()))
2912 nf1=MEDCouplingFieldInt(ON_NODES)
2913 nf1.setTime(9.,10,-1)
2914 nf1.setMesh(f1.getMesh())
2915 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2916 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2917 nff1=MEDFileIntField1TS.New()
2918 nff1.setFieldNoProfileSBT(nf1)
2919 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2920 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2923 nf2=MEDCouplingFieldInt(ON_NODES)
2924 nf2.setTime(19.,20,-11)
2925 nf2.setMesh(f1.getMesh())
2926 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2927 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2928 nff2=MEDFileIntField1TS.New()
2929 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2930 nff2.setFieldProfile(nf2,mm1,0,npfl)
2931 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2932 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2933 self.assertTrue(b.isEqual(npfl))
2934 self.assertTrue(a.isEqual(narr2))
2936 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2937 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2938 self.assertTrue(b.isEqual(npfl))
2939 self.assertTrue(a.isEqual(narr2))
2941 nf3=MEDCouplingFieldDouble(ON_NODES)
2942 nf3.setName("VectorFieldOnNodesDouble")
2943 nf3.setTime(29.,30,-21)
2944 nf3.setMesh(f1.getMesh())
2945 nf3.setArray(f1.getMesh().getCoords())
2946 nff3=MEDFileField1TS.New()
2947 nff3.setFieldNoProfileSBT(nf3)
2949 fs=MEDFileFields(fname)
2950 self.assertEqual(len(fs),4)
2951 ffs=[it for it in fs]
2952 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2953 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2954 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2955 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2957 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2958 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2959 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2960 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2961 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2963 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2964 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2965 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2966 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2967 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2968 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2969 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2970 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2972 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2973 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2974 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2975 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2979 def testMEDFileFields1(self):
2980 fname="Pyfile64.med"
2981 f1=MEDCouplingFieldDouble(ON_NODES)
2982 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2983 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2984 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2986 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2988 f1.setName("Field1")
2989 ff1=MEDFileField1TS.New()
2990 ff1.setFieldNoProfileSBT(f1)
2991 self.assertEqual(ff1.getDtUnit(),"us")
2993 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2994 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2996 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2997 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2998 ff1s.setName("Field2")
3000 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3001 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3002 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3003 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3004 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3005 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3006 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3007 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3010 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3012 def testMEDFileFields2(self):
3013 fname="Pyfile65.med"
3014 # to check that all is initialize
3015 MEDFileField1TS().__str__()
3016 MEDFileFieldMultiTS().__str__()
3017 # building a mesh containing 4 tri3 + 5 quad4
3018 tri=MEDCouplingUMesh("tri",2)
3019 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3020 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3021 tris = [tri.deepCopy() for i in range(4)]
3022 for i,elt in enumerate(tris): elt.translate([i,0])
3023 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3024 quad=MEDCouplingUMesh("quad",2)
3025 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3026 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3027 quads = [quad.deepCopy() for i in range(5)]
3028 for i,elt in enumerate(quads): elt.translate([5+i,0])
3029 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3030 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3031 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3033 fmts0_0=MEDFileFieldMultiTS()
3034 fmts0_1=MEDFileFieldMultiTS()
3037 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3038 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3039 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3040 f.setTime(float(i+1)+0.1,i+1,-i-1)
3041 fmts0_0.appendFieldNoProfileSBT(f)
3042 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3043 self.assertEqual(fmts0_1.getName(),name1)
3044 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3045 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3047 # components names have been modified to generate errors
3048 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3049 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3050 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3051 f1ts.setInfo(['aa [bb]','eee [dd]'])
3052 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3054 # add a mismatch of nb of compos
3056 fmts0_2=fmts0_0.deepCopy()
3057 fmts0_3=fmts0_0.deepCopy()
3058 fmts0_4=fmts0_0.deepCopy()
3059 fmts0_5=fmts0_0.shallowCpy()
3060 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)
3062 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3063 del fmts0_3[[1.1,(6,-6),9]]
3064 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3065 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3066 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3067 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3068 fmts0_7=fmts0_4[::-3]
3069 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3070 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3073 fs0.pushField(fmts0_0)
3074 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3075 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3076 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3077 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3079 fs0=MEDFileFields(fname)
3080 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3081 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3082 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3083 del fs1[["2ndField",3]]
3084 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3085 fs2=fs0[[0,"4thField"]]
3086 self.assertTrue(isinstance(fs2,MEDFileFields))
3087 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3089 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3092 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3094 def testMEDFileFields3(self):
3095 fname="Pyfile66.med"
3096 # building a mesh containing 4 tri3 + 5 quad4
3097 tri=MEDCouplingUMesh("tri",2)
3098 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3099 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3100 tris = [tri.deepCopy() for i in range(4)]
3101 for i,elt in enumerate(tris): elt.translate([i,0])
3102 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3103 quad=MEDCouplingUMesh("quad",2)
3104 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3105 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3106 quads = [quad.deepCopy() for i in range(5)]
3107 for i,elt in enumerate(quads): elt.translate([5+i,0])
3108 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3109 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3110 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3112 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3114 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3115 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3116 fmts0_0=MEDFileFieldMultiTS()
3117 fmts0_1=MEDFileFieldMultiTS()
3120 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3121 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3122 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3123 f.setTime(float(i+1)+0.1,i+1,-i-1)
3124 fmts0_0.appendFieldProfile(f,mm,0,pfl)
3125 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3126 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3127 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3130 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3131 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3132 fmts0_0.zipPflsNames()
3133 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3134 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3135 fmts0_2=fmts0_0.deepCopy()
3136 fmts0_3=fmts0_0.deepCopy()
3137 fmts0_4=fmts0_0.deepCopy()
3139 fs0.pushField(fmts0_0)
3140 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3141 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3142 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3143 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3145 fmts0_5=MEDFileFieldMultiTS()
3147 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3148 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3149 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3150 f.setTime(float(i+1)+0.1,i+1,-i-1)
3151 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3153 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3154 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3155 fs0.checkGlobsCoherency()
3160 def testSplitComponents1(self):
3161 fname="Pyfile67.med"
3162 # building a mesh containing 4 tri3 + 5 quad4
3163 tri=MEDCouplingUMesh("tri",2)
3164 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3165 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3166 tris = [tri.deepCopy() for i in range(4)]
3167 for i,elt in enumerate(tris): elt.translate([i,0])
3168 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3169 quad=MEDCouplingUMesh("quad",2)
3170 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3171 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3172 quads = [quad.deepCopy() for i in range(5)]
3173 for i,elt in enumerate(quads): elt.translate([5+i,0])
3174 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3175 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3176 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3178 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3180 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3181 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3183 fmts0_1=MEDFileFieldMultiTS()
3185 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3188 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3189 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3190 f.setTime(float(i+1)+0.1,i+1,-i-1)
3191 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3192 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3194 fs.pushField(fmts0_1)
3195 self.assertEqual(1,len(fs))
3196 l=fmts0_1.splitComponents()
3197 self.assertEqual(3,len(l))
3198 for elt in l: self.assertEqual(10,len(elt))
3199 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3201 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3204 self.assertEqual(4,len(fs))
3205 for elt in fs: self.assertEqual(10,len(elt))
3206 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3207 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3209 fs.write(fname,0) ; del fs
3211 fs1=MEDFileFields(fname)
3212 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3213 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3214 self.assertEqual(4,len(fs1))
3216 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3217 f1ts=fs1[fieldName][i]
3218 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3219 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3220 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3222 f1ts=fs1["1stField"][i]
3223 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3224 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3225 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3230 def testMEDFileFieldConvertTo1(self):
3231 fname="Pyfile68.med"
3232 # building a mesh containing 4 tri3 + 5 quad4
3233 tri=MEDCouplingUMesh("tri",2)
3234 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3235 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3236 tris = [tri.deepCopy() for i in range(4)]
3237 for i,elt in enumerate(tris): elt.translate([i,0])
3238 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3239 quad=MEDCouplingUMesh("quad",2)
3240 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3241 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3242 quads = [quad.deepCopy() for i in range(5)]
3243 for i,elt in enumerate(quads): elt.translate([5+i,0])
3244 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3245 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3246 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3247 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3249 ff0=MEDFileField1TS()
3250 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")
3251 f0.checkConsistencyLight()
3252 ff0.setFieldNoProfileSBT(f0)
3254 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3255 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3257 ff0i=ff0.convertToInt()
3258 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3259 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3261 ff1=ff0i.convertToDouble()
3262 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3263 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3265 ff0i64=ff0.convertToInt64()
3266 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3267 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3269 ff2=ff0i64.convertToDouble()
3270 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3271 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3273 del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3274 ff0=MEDFileField1TS()
3275 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")
3276 f0.checkConsistencyLight()
3277 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3278 ff0.setFieldProfile(f0,mm,0,pfl)
3279 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3280 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3282 ff0i=ff0.convertToInt()
3283 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3284 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3285 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3287 ff1=ff0i.convertToDouble()
3288 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3289 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3290 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3292 ff0i64=ff0.convertToInt64()
3293 self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3294 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3295 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3297 ff2=ff0i64.convertToDouble()
3298 self.assertTrue(isinstance(ff2,MEDFileField1TS))
3299 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3300 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3302 ff0=MEDFileFieldMultiTS()
3303 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)
3304 f0.checkConsistencyLight()
3305 ff0.appendFieldProfile(f0,mm,0,pfl)
3306 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)
3307 f0.checkConsistencyLight()
3308 ff0.appendFieldProfile(f0,mm,0,pfl)
3309 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)
3310 f0.checkConsistencyLight()
3311 ff0.appendFieldProfile(f0,mm,0,pfl)
3312 ff1=ff0.convertToInt()
3313 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3314 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3315 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3316 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3317 arr=ff1.getUndergroundDataArray(dt,it)
3318 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3320 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3325 ff1=ff1.convertToDouble()
3326 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3327 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3328 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3329 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3330 arr=ff1.getUndergroundDataArray(dt,it)
3331 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3333 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3335 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3336 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3337 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3338 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3339 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3340 arr=ff1.getUndergroundDataArray(dt,it)
3341 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3343 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3347 def testMEDFileFieldPartialLoading(self):
3348 fname="Pyfile69.med"
3350 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3352 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3353 # building a mesh containing 30 tri3 + 40 quad4
3354 tri=MEDCouplingUMesh("tri",2)
3355 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3356 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3357 tris = [tri.deepCopy() for i in range(30)]
3358 for i,elt in enumerate(tris): elt.translate([i,0])
3359 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3360 quad=MEDCouplingUMesh("quad",2)
3361 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3362 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3363 quads = [quad.deepCopy() for i in range(40)]
3364 for i,elt in enumerate(quads): elt.translate([40+i,0])
3365 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3366 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3367 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3368 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3370 ff0=MEDFileField1TS()
3371 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")
3372 f0.checkConsistencyLight()
3373 ff0.setFieldNoProfileSBT(f0)
3376 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3377 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3379 ff0=MEDFileField1TS()
3380 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")
3381 f0.checkConsistencyLight()
3382 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3383 ff0.setFieldProfile(f0,mm,0,pfl)
3384 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3385 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3388 ff0=MEDFileField1TS(fname,False)
3389 self.assertEqual(ff0.getName(),"FieldCell")
3390 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3391 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3392 heap_memory_ref=ff0.getHeapMemorySize()
3393 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3395 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3396 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3397 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3399 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3400 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3401 heap_memory_ref=ff0.getHeapMemorySize()
3402 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3404 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3405 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3406 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3408 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3409 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3410 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3411 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3413 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3414 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3415 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3416 ff0.loadArraysIfNecessary() ##
3417 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3418 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3419 heap_memory_ref=ff0.getHeapMemorySize()
3420 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3422 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3423 self.assertEqual(hmd,-800) # -50*8*2
3425 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3427 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3428 heap_memory_ref=ff0.getHeapMemorySize()
3429 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3431 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3432 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3434 fieldName="FieldCellMultiTS"
3435 ff0=MEDFileFieldMultiTS()
3437 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)
3438 f0.setTime(float(t)+0.1,t,100+t)
3439 f0.checkConsistencyLight()
3440 ff0.appendFieldNoProfileSBT(f0)
3444 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3445 heap_memory_ref=ff0.getHeapMemorySize()
3446 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3448 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3451 ffs=MEDFileFields(fname,False)
3452 heap_memory_ref=ffs.getHeapMemorySize()
3453 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3455 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3459 def testMEDFileMeshReadSelector1(self):
3460 mrs=MEDFileMeshReadSelector()
3461 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3462 mrs.__str__() ; mrs.__repr__()
3464 mrs=MEDFileMeshReadSelector(0)
3465 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())
3466 mrs=MEDFileMeshReadSelector(1)
3467 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3468 mrs=MEDFileMeshReadSelector(2)
3469 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3470 mrs=MEDFileMeshReadSelector(3)
3471 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3472 mrs=MEDFileMeshReadSelector(4)
3473 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3474 mrs=MEDFileMeshReadSelector(5)
3475 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3476 mrs=MEDFileMeshReadSelector(6)
3477 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3478 mrs=MEDFileMeshReadSelector(7)
3479 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3480 mrs=MEDFileMeshReadSelector(8)
3481 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3482 mrs=MEDFileMeshReadSelector(9)
3483 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3484 mrs=MEDFileMeshReadSelector(10)
3485 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3486 mrs=MEDFileMeshReadSelector(11)
3487 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3488 mrs=MEDFileMeshReadSelector(12)
3489 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3490 mrs=MEDFileMeshReadSelector(13)
3491 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3492 mrs=MEDFileMeshReadSelector(14)
3493 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3494 mrs=MEDFileMeshReadSelector(15)
3495 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3496 mrs=MEDFileMeshReadSelector(16)
3497 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3498 mrs=MEDFileMeshReadSelector(17)
3499 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3500 mrs=MEDFileMeshReadSelector(18)
3501 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3502 mrs=MEDFileMeshReadSelector(19)
3503 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3504 mrs=MEDFileMeshReadSelector(20)
3505 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3506 mrs=MEDFileMeshReadSelector(21)
3507 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3508 mrs=MEDFileMeshReadSelector(22)
3509 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3510 mrs=MEDFileMeshReadSelector(23)
3511 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3512 mrs=MEDFileMeshReadSelector(24)
3513 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3514 mrs=MEDFileMeshReadSelector(25)
3515 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3516 mrs=MEDFileMeshReadSelector(26)
3517 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3518 mrs=MEDFileMeshReadSelector(27)
3519 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3520 mrs=MEDFileMeshReadSelector(28)
3521 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3522 mrs=MEDFileMeshReadSelector(29)
3523 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3524 mrs=MEDFileMeshReadSelector(30)
3525 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3526 mrs=MEDFileMeshReadSelector(31)
3527 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3528 mrs=MEDFileMeshReadSelector(32)
3529 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3530 mrs=MEDFileMeshReadSelector(33)
3531 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3532 mrs=MEDFileMeshReadSelector(34)
3533 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3534 mrs=MEDFileMeshReadSelector(35)
3535 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3536 mrs=MEDFileMeshReadSelector(36)
3537 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3538 mrs=MEDFileMeshReadSelector(37)
3539 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3540 mrs=MEDFileMeshReadSelector(38)
3541 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3542 mrs=MEDFileMeshReadSelector(39)
3543 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3544 mrs=MEDFileMeshReadSelector(40)
3545 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3546 mrs=MEDFileMeshReadSelector(41)
3547 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3548 mrs=MEDFileMeshReadSelector(42)
3549 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3550 mrs=MEDFileMeshReadSelector(43)
3551 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3552 mrs=MEDFileMeshReadSelector(44)
3553 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3554 mrs=MEDFileMeshReadSelector(45)
3555 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3556 mrs=MEDFileMeshReadSelector(46)
3557 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3558 mrs=MEDFileMeshReadSelector(47)
3559 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3560 mrs=MEDFileMeshReadSelector(48)
3561 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3562 mrs=MEDFileMeshReadSelector(49)
3563 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3564 mrs=MEDFileMeshReadSelector(50)
3565 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3566 mrs=MEDFileMeshReadSelector(51)
3567 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3568 mrs=MEDFileMeshReadSelector(52)
3569 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3570 mrs=MEDFileMeshReadSelector(53)
3571 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3572 mrs=MEDFileMeshReadSelector(54)
3573 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3574 mrs=MEDFileMeshReadSelector(55)
3575 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3576 mrs=MEDFileMeshReadSelector(56)
3577 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3578 mrs=MEDFileMeshReadSelector(57)
3579 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3580 mrs=MEDFileMeshReadSelector(58)
3581 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3582 mrs=MEDFileMeshReadSelector(59)
3583 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3584 mrs=MEDFileMeshReadSelector(60)
3585 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3586 mrs=MEDFileMeshReadSelector(61)
3587 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3588 mrs=MEDFileMeshReadSelector(62)
3589 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3590 mrs=MEDFileMeshReadSelector(63)
3591 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3593 mrs=MEDFileMeshReadSelector(63)
3594 mrs.setCellFamilyFieldReading(False)
3595 self.assertEqual(mrs.getCode(),62)
3596 mrs.setCellFamilyFieldReading(True)
3597 self.assertEqual(mrs.getCode(),63)
3598 mrs.setNodeFamilyFieldReading(False)
3599 self.assertEqual(mrs.getCode(),61)
3600 mrs.setNodeFamilyFieldReading(True)
3601 self.assertEqual(mrs.getCode(),63)
3602 mrs.setCellNameFieldReading(False)
3603 self.assertEqual(mrs.getCode(),59)
3604 mrs.setCellNameFieldReading(True)
3605 self.assertEqual(mrs.getCode(),63)
3606 mrs.setNodeNameFieldReading(False)
3607 self.assertEqual(mrs.getCode(),55)
3608 mrs.setNodeNameFieldReading(True)
3609 self.assertEqual(mrs.getCode(),63)
3610 mrs.setCellNumFieldReading(False)
3611 self.assertEqual(mrs.getCode(),47)
3612 mrs.setCellNumFieldReading(True)
3613 self.assertEqual(mrs.getCode(),63)
3614 mrs.setNodeNumFieldReading(False)
3615 self.assertEqual(mrs.getCode(),31)
3616 mrs.setNodeNumFieldReading(True)
3617 self.assertEqual(mrs.getCode(),63)
3621 def testPartialReadOfMeshes(self):
3622 fname="Pyfile70.med"
3623 # building a mesh containing 4 tri3 + 5 quad4
3624 tri=MEDCouplingUMesh("tri",2)
3625 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3626 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3627 tris = [tri.deepCopy() for i in range(4)]
3628 for i,elt in enumerate(tris): elt.translate([i,0])
3629 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3630 quad=MEDCouplingUMesh("quad",2)
3631 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3632 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3633 quads = [quad.deepCopy() for i in range(5)]
3634 for i,elt in enumerate(quads): elt.translate([5+i,0])
3635 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3636 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3637 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3638 m1=m.buildDescendingConnectivity()[0]
3639 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3641 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3642 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3643 mm.setGroupsAtLevel(0,[grp0,grp1])
3644 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3645 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3646 mm.setGroupsAtLevel(-1,[grp2,grp3])
3647 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3648 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3649 mm.setGroupsAtLevel(1,[grp4,grp5])
3650 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3651 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3652 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3656 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3657 b4_ref_heap_mem=mm.getHeapMemorySize()
3658 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3659 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3660 ref_heap_mem=mm.getHeapMemorySize()
3661 # check the gain of memory using 1GTUMesh instead of UMesh
3662 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
3664 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3665 self.assertEqual(len(mm.getGroupsNames()),0)
3666 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3667 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3668 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3669 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3670 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3671 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3672 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3673 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3674 delta1=ref_heap_mem-mm.getHeapMemorySize()
3675 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3677 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3678 self.assertEqual(len(mm.getGroupsNames()),6)
3679 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3680 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3681 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3682 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3683 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3684 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3685 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3686 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3687 delta2=ref_heap_mem-mm.getHeapMemorySize()
3688 self.assertTrue(delta2<delta1)
3689 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3691 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3692 self.assertEqual(len(mm.getGroupsNames()),6)
3693 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3694 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3695 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3696 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3697 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3698 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3699 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3700 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3701 delta3=ref_heap_mem-mm.getHeapMemorySize()
3702 self.assertTrue(delta3<delta2)
3703 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3705 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3706 self.assertEqual(len(mm.getGroupsNames()),6)
3707 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3708 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3709 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3710 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3711 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3712 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3713 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3714 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3715 delta4=ref_heap_mem-mm.getHeapMemorySize()
3716 self.assertTrue(delta4<delta3)
3717 self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3719 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3720 self.assertEqual(len(mm.getGroupsNames()),6)
3721 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3722 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3723 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3724 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3725 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3726 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3727 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3728 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3729 delta5=ref_heap_mem-mm.getHeapMemorySize()
3730 self.assertTrue(delta5<delta4)
3731 self.assertEqual(delta5,0)
3734 # this test checks that setFieldProfile perform a check of the array length
3735 # compared to the profile length. This test also checks that mesh attribute of field
3736 # is not used by setFieldProfile (because across this test mesh is equal to None)
3738 def testCheckCompatibilityPfl1(self):
3739 # building a mesh containing 4 tri3 + 5 quad4
3740 tri=MEDCouplingUMesh("tri",2)
3741 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3742 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3743 tris = [tri.deepCopy() for i in range(4)]
3744 for i,elt in enumerate(tris): elt.translate([i,0])
3745 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3746 quad=MEDCouplingUMesh("quad",2)
3747 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3748 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3749 quads = [quad.deepCopy() for i in range(5)]
3750 for i,elt in enumerate(quads): elt.translate([5+i,0])
3751 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3752 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3753 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3754 m1=m.buildDescendingConnectivity()[0]
3755 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3757 f1ts=MEDFileField1TS()
3758 f=MEDCouplingFieldDouble(ON_NODES)
3759 vals=DataArrayDouble(7) ; vals.iota(1000)
3761 f.setName("anonymous") # f has no mesh it is not a bug
3762 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3763 f1ts.setFieldProfile(f,mm,0,pfl)
3765 f1ts=MEDFileField1TS()
3766 f=MEDCouplingFieldDouble(ON_NODES)
3767 vals=DataArrayDouble(8) ; vals.iota(1000)
3769 f.setName("anonymous") # f has no mesh it is not a bug
3770 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3771 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3773 f1ts=MEDFileField1TS()
3774 f=MEDCouplingFieldDouble(ON_CELLS)
3775 vals=DataArrayDouble(7) ; vals.iota(1000)
3777 f.setName("anonymous") # f has no mesh it is not a bug
3778 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3779 f1ts.setFieldProfile(f,mm,0,pfl)
3780 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3782 f1ts=MEDFileField1TS()
3783 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3784 vals=DataArrayDouble(27) ; vals.iota(1000)
3786 f.setName("anonymous") # f has no mesh it is not a bug
3787 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3789 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])
3790 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3791 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])
3793 f1ts.setFieldProfile(f,mm,0,pfl)
3794 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3795 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3796 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3797 vals=DataArrayDouble(27) ; vals.iota(1000)
3798 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3800 f1ts=MEDFileField1TS()
3801 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3802 vals=DataArrayDouble(25) ; vals.iota(1000)
3804 f.setName("anonymous") # f has no mesh it is not a bug
3805 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3806 f1ts.setFieldProfile(f,mm,0,pfl)
3807 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3808 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3810 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3811 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3813 f1ts=MEDFileField1TS()
3814 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3815 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3817 f1ts.setFieldProfile(f,mm,0,pfl)
3821 def testWRMeshWithNoCells(self):
3822 fname="Pyfile71.med"
3823 a=DataArrayDouble(4) ; a.iota()
3824 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3825 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3827 m.setMeshAtLevel(0,m00)
3828 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3829 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3833 m=MEDFileMesh.New(fname)
3834 self.assertEqual((),m.getNonEmptyLevels())
3835 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))
3836 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3837 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3841 def testWRQPolyg1(self):
3842 fname="Pyfile72.med"
3843 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3844 m.insertNextCell([0,2,1,3])
3845 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3847 ms = [m.deepCopy() for i in range(4)]
3848 for i,elt in enumerate(ms):
3849 elt.translate([float(i)*1.5,0.])
3851 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3852 m0.convertAllToPoly()
3854 ms = [m.deepCopy() for i in range(5)]
3855 for i,elt in enumerate(ms):
3856 elt.translate([float(i)*1.5,1.5])
3858 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3859 m1.convertAllToPoly()
3860 m1.convertLinearCellsToQuadratic()
3862 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3865 mm.setMeshAtLevel(0,m)
3866 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3867 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3868 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3869 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3874 mm_read=MEDFileUMesh(fname)
3875 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3876 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3877 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3878 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3880 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3882 arr0=DataArrayDouble(9) ; arr0.iota()
3883 arr1=DataArrayDouble(9) ; arr1.iota(100)
3884 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3885 f.setArray(arr) ; f.checkConsistencyLight()
3887 ff=MEDFileField1TS()
3888 ff.setFieldNoProfileSBT(f)
3891 ff_read=MEDFileField1TS(fname)
3892 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3893 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3897 def testLoadIfNecessaryOnFromScratchFields0(self):
3899 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3901 fname="Pyfile77.med"
3902 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3903 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3905 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3906 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3907 m.finishInsertingCells()
3909 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3910 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3914 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3915 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3917 f0.setName("myELNOField")
3918 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3919 f0.setArray(arrs[0])
3920 ff0.appendFieldNoProfileSBT(f0)
3923 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3924 f0.setArray(arrs[1])
3925 ff0.appendFieldNoProfileSBT(f0)
3928 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3929 f0.setArray(arrs[2])
3930 ff0.appendFieldNoProfileSBT(f0)
3933 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3934 f0.setArray(arrs[3])
3935 ff0.appendFieldNoProfileSBT(f0)
3937 for i,arr in enumerate(arrs):
3938 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3939 fs[0][i].loadArraysIfNecessary()
3940 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3942 fs.loadArraysIfNecessary()
3943 for i,arr in enumerate(arrs):
3944 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3946 fs[0].loadArraysIfNecessary()
3947 for i,arr in enumerate(arrs):
3948 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3953 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3954 """ 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.
3956 fname="Pyfile78.med"
3957 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)
3958 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3959 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3961 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
3962 m0.insertNextCell(NORM_TETRA4,elt)
3964 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
3965 m0.insertNextCell(NORM_PYRA5,elt)
3967 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
3968 m0.insertNextCell(NORM_PENTA6,elt)
3970 m0.checkConsistency()
3971 m1=MEDCouplingUMesh(); m1.setName("mesh")
3972 m1.setMeshDimension(2);
3973 m1.allocateCells(5);
3974 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3975 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3976 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3977 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3978 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3979 m1.setCoords(coords);
3980 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3982 m3.insertNextCell(NORM_POINT1,[2])
3983 m3.insertNextCell(NORM_POINT1,[3])
3984 m3.insertNextCell(NORM_POINT1,[4])
3985 m3.insertNextCell(NORM_POINT1,[5])
3988 mm.setMeshAtLevel(0,m0)
3989 mm.setMeshAtLevel(-1,m1)
3990 mm.setMeshAtLevel(-3,m3)
3992 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3993 mm=MEDFileMesh.New(fname)
3995 fmts=MEDFileFieldMultiTS()
3996 f1ts=MEDFileField1TS()
3997 for lev in mm.getNonEmptyLevels():
3998 for gt in mm.getGeoTypesAtLevel(lev):
3999 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4000 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4001 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4002 f.setArray(arr) ; f.setName("f0")
4003 f1ts.setFieldNoProfileSBT(f)
4006 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4007 for lev in [0,-1,-3]:
4008 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4010 fmts.pushBackTimeStep(f1ts)
4014 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4015 fs=MEDFileFields(fname)
4016 self.assertEqual(len(fs),1)
4017 self.assertEqual(len(fs[0]),1)
4019 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),'','')])])
4020 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))
4024 def testMEDFileUMeshSetName(self):
4025 """ 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.
4026 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4028 fname="Pyfile79.med"
4029 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4031 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4032 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)
4033 m0.allocateCells(5);
4034 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4035 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4036 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4037 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4038 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4039 m0.setCoords(coords);
4040 mm.setMeshAtLevel(0,m0)
4041 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4043 m2.insertNextCell(NORM_POINT1,[2])
4044 m2.insertNextCell(NORM_POINT1,[3])
4045 m2.insertNextCell(NORM_POINT1,[4])
4046 m2.insertNextCell(NORM_POINT1,[5])
4047 mm.setMeshAtLevel(-2,m2)
4048 self.assertEqual(mm.getName(),"")
4049 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4050 mm.forceComputationOfParts()
4051 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4053 self.assertEqual(mm.getName(),"abc")
4054 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4055 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4056 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4057 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4061 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4062 fileName="Pyfile80.med"
4063 m=MEDCouplingCMesh() ; m.setName("cmesh")
4064 arr=DataArrayDouble(6) ; arr.iota()
4065 m.setCoords(arr,arr)
4066 nbCells=m.getNumberOfCells()
4067 self.assertEqual(25,nbCells)
4068 f=MEDCouplingFieldDouble(ON_CELLS)
4069 f.setName("FieldOnCell") ; f.setMesh(m)
4070 arr=DataArrayDouble(nbCells) ; arr.iota()
4074 fmts=MEDFileFieldMultiTS()
4076 for i in range(nbCells):
4077 t=(float(i)+0.1,i+1,-i-2)
4079 arr2=DataArrayDouble(nbCells)
4080 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4083 f1ts=MEDFileField1TS()
4084 f1ts.setFieldNoProfileSBT(f)
4085 fmts.pushBackTimeStep(f1ts)
4087 fmts.unloadArraysWithoutDataLoss()
4088 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))
4089 fs=MEDFileFields() ; fs.pushField(fmts)
4090 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))
4091 fs.unloadArraysWithoutDataLoss()
4092 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))
4094 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))
4095 f1ts.unloadArraysWithoutDataLoss()
4096 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))
4097 mm.write(fileName,2)
4098 fs.write(fileName,0)
4099 del m,fmts,mm,f,f1ts
4101 mm=MEDFileMesh.New(fileName)
4102 fmts=MEDFileFieldMultiTS(fileName)
4103 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))
4104 fmts.unloadArraysWithoutDataLoss()
4105 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4106 fmts.loadArraysIfNecessary()
4107 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))
4109 fs=MEDFileFields(fileName)
4110 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))
4111 fs.unloadArraysWithoutDataLoss()
4112 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4113 fs.loadArraysIfNecessary()
4114 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))
4116 f1ts=MEDFileField1TS(fileName)
4117 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))
4118 f1ts.unloadArraysWithoutDataLoss()
4119 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4120 f1ts.loadArraysIfNecessary()
4121 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))
4125 def testMEDFileUMeshLoadPart1(self):
4126 """ 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
4127 memory of the returned instance.
4129 fileName="Pyfile81.med"
4130 arr=DataArrayDouble(6) ; arr.iota()
4131 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4132 m=m.buildUnstructured()
4134 m.changeSpaceDimension(3,0.)
4135 infos=["aa [b]","cc [de]","gg [klm]"]
4136 m.getCoords().setInfoOnComponents(infos)
4137 m.checkConsistency()
4139 mm.setMeshAtLevel(0,m)
4140 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4141 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4142 mm.setMeshAtLevel(-1,m1)
4143 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])
4144 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])
4145 namesCellL0=DataArrayAsciiChar(25,16)
4146 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
4147 renumM1=DataArrayInt([3,4,0,2,1])
4148 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4149 mm.setRenumFieldArr(0,renum0)
4150 mm.setFamilyFieldArr(0,famField0)
4151 mm.setNameFieldAtLevel(0,namesCellL0)
4152 mm.setRenumFieldArr(-1,renumM1)
4153 mm.setFamilyFieldArr(-1,famFieldM1)
4154 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])
4155 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])
4156 namesNodes=DataArrayAsciiChar(36,16)
4157 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
4158 mm.setRenumFieldArr(1,renum1)
4159 mm.setFamilyFieldArr(1,famField1)
4160 mm.setNameFieldAtLevel(1,namesNodes)
4161 mm.setFamilyId("Fam7",77)
4162 mm.setFamilyId("Fam8",88)
4163 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4164 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4165 mm.write(fileName,2)
4167 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4168 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4169 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])))
4170 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)
4171 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4172 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4173 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4174 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4175 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4176 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4177 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4179 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4180 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4181 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])))
4182 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)
4183 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4184 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4185 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4186 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4187 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4188 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4189 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4191 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4192 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4193 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4194 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4195 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4196 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4197 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4198 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4199 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])))
4200 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4201 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)
4202 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4203 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4204 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4205 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4209 def testMEDFileFieldsLoadPart1(self):
4210 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4212 fileName="Pyfile82.med"
4214 compos=["aa [kg]","bbb [m/s]"]
4215 arr=DataArrayDouble(6) ; arr.iota()
4216 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4217 m=m.buildUnstructured()
4219 m.changeSpaceDimension(3,0.)
4220 infos=["aa [b]","cc [de]","gg [klm]"]
4221 m.getCoords().setInfoOnComponents(infos)
4222 m.checkConsistency()
4223 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4225 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4226 arr[:,0]=list(range(25))
4227 arr[:,1]=list(range(100,125))
4229 WriteField(fileName,f,True)
4230 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4231 f.setName("FieldNode")
4232 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4233 arr[:,0]=list(range(200,236))
4234 arr[:,1]=list(range(300,336))
4236 f.checkConsistencyLight()
4237 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4240 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4242 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4243 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4246 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4248 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4250 fs[0][0].loadArrays()
4251 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4252 arr.setInfoOnComponents(compos)
4253 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4254 fs[1][0].loadArrays()
4255 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4256 arr.setInfoOnComponents(compos)
4257 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4261 def testMEDFileWithoutCells1(self):
4262 fileName="Pyfile83.med"
4263 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4264 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4268 mm.write(fileName,2)
4270 mm=MEDFileMesh.New(fileName)
4271 self.assertEqual(mm.getName(),"mesh")
4272 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4276 def testZipCoordsWithLoadPart1(self):
4277 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4279 fileName="Pyfile84.med"
4281 compos=["aa [kg]","bbb [m/s]"]
4282 arr=DataArrayDouble(6) ; arr.iota()
4283 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4284 m=m.buildUnstructured()
4286 m.changeSpaceDimension(3,0.)
4287 infos=["aa [b]","cc [de]","gg [klm]"]
4288 m.getCoords().setInfoOnComponents(infos)
4289 m.checkConsistency()
4290 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4292 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4293 arr[:,0]=list(range(25))
4294 arr[:,1]=list(range(100,125))
4296 WriteField(fileName,f,True)
4297 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4298 f.setName("FieldNode")
4299 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4300 arr[:,0]=list(range(200,236))
4301 arr[:,1]=list(range(300,336))
4303 f.checkConsistencyLight()
4304 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4307 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4309 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4310 self.assertEqual(spd.getSlice(),slice(4,6,1))
4311 spd=mm.getPartDefAtLevel(1)
4312 self.assertEqual(spd.getSlice(),slice(4,14,1))
4313 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4314 mm.zipCoords() # <- The important line is here !
4315 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4316 self.assertEqual(spd.getSlice(),slice(4,6,1))
4317 spd=mm.getPartDefAtLevel(1)
4318 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4319 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4320 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4321 fs[0][0].loadArrays()
4322 arr=DataArrayDouble([(4,104),(5,105)])
4323 arr.setInfoOnComponents(compos)
4324 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4325 fs[1][0].loadArrays()
4326 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4327 arr.setInfoOnComponents(compos)
4328 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4329 m_ref = mm[0].deepCopy()
4330 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4332 mrs = MEDFileMeshReadSelector()
4333 mrs.setNumberOfCoordsLoadSessions(2)
4334 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4336 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4337 self.assertEqual(spd.getSlice(),slice(4,6,1))
4338 spd=mm.getPartDefAtLevel(1)
4339 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4340 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4341 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4342 fs[0][0].loadArrays()
4343 arr=DataArrayDouble([(4,104),(5,105)])
4344 arr.setInfoOnComponents(compos)
4345 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4346 fs[1][0].loadArrays()
4347 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4348 arr.setInfoOnComponents(compos)
4349 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4350 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4354 def testMEDFileCMeshSetGroupsAtLevel(self):
4355 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4357 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4359 mm=MEDFileCMesh() ; mm.setMesh(m)
4360 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4361 mm.setGroupsAtLevel(0,[grp])
4362 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4366 def testMEDFileUMeshBuildExtrudedMesh1(self):
4367 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4368 fileName="Pyfile85.med"
4371 meshName3DOut="Mesh3D"
4373 d1=DataArrayInt([0,4,20,24])
4374 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4376 a=DataArrayDouble(6) ; a.iota()
4377 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4378 m=m.buildUnstructured()
4379 d1c=d1.buildComplement(m.getNumberOfCells())
4380 m=m[d1c] ; m.zipCoords()
4381 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4383 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4384 m.setName(meshName2D)
4385 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4386 e=d.deltaShiftIndex().findIdsEqual(1)
4389 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4390 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4391 mm.setGroupsAtLevel(0,[grp0])
4392 grp1=e ; grp1.setName("grp1")
4393 mm.setGroupsAtLevel(-1,[grp1])
4394 mm.write(fileName,2)
4396 a=DataArrayDouble(3) ; a.iota()
4397 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4398 tmp.setName(meshName1D)
4399 tmp.changeSpaceDimension(3)
4400 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4402 mm1D.setMeshAtLevel(0,tmp)
4403 mm1D.write(fileName,0)
4405 mm2D=MEDFileMesh.New(fileName,meshName2D)
4406 mm1D=MEDFileMesh.New(fileName,meshName1D)
4407 m1D=mm1D.getMeshAtLevel(0)
4408 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4410 self.assertEqual(mm3D.getName(),mm2D.getName())
4411 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4412 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4413 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4414 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4415 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4416 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4417 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4418 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4419 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4420 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.)])
4421 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4422 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])
4423 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4424 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])
4425 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4426 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])
4427 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4428 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])
4429 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4430 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])
4431 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4432 d=DataArrayInt(129) ; d.iota() ; d*=3
4433 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4435 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4436 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4437 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4438 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4439 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])))
4440 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])))
4441 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])))
4442 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])))
4443 mm3D.setName("MeshExtruded")
4444 mm3D.write(fileName,0)
4447 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4449 def testMEDFileUMeshPickeling1(self):
4450 outFileName="Pyfile86.med"
4451 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)
4452 c.setInfoOnComponents(["aa","bbb"])
4453 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4454 m=MEDCouplingUMesh();
4455 m.setMeshDimension(2);
4457 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4458 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4459 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4460 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4461 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4462 m.finishInsertingCells();
4464 m.checkConsistencyLight()
4465 m1=MEDCouplingUMesh.New();
4466 m1.setMeshDimension(1);
4467 m1.allocateCells(3);
4468 m1.insertNextCell(NORM_SEG2,2,[1,4])
4469 m1.insertNextCell(NORM_SEG2,2,[3,6])
4470 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4471 m1.finishInsertingCells();
4473 m1.checkConsistencyLight()
4474 m2=MEDCouplingUMesh.New();
4475 m2.setMeshDimension(0);
4476 m2.allocateCells(4);
4477 m2.insertNextCell(NORM_POINT1,1,[1])
4478 m2.insertNextCell(NORM_POINT1,1,[3])
4479 m2.insertNextCell(NORM_POINT1,1,[2])
4480 m2.insertNextCell(NORM_POINT1,1,[6])
4481 m2.finishInsertingCells();
4483 m2.checkConsistencyLight()
4485 mm=MEDFileUMesh.New()
4486 self.assertTrue(mm.getUnivNameWrStatus())
4487 mm.setName("MyFirstMEDCouplingMEDmesh")
4488 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4492 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4494 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4495 # playing with groups
4496 g1_2=DataArrayInt.New()
4497 g1_2.setValues([1,3],2,1)
4499 g2_2=DataArrayInt.New()
4500 g2_2.setValues([1,2,3],3,1)
4502 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4503 g1_1=DataArrayInt.New()
4504 g1_1.setValues([0,1,2],3,1)
4506 g2_1=DataArrayInt.New()
4507 g2_1.setValues([0,2],2,1)
4509 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4510 g1_N=DataArrayInt.New()
4511 g1_N.setValues(list(range(8)),8,1)
4513 g2_N=DataArrayInt.New()
4514 g2_N.setValues(list(range(9)),9,1)
4516 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4517 mm.createGroupOnAll(0,"GrpOnAllCell")
4518 # check content of mm
4519 t=mm.getGroupArr(0,"G1",False)
4520 self.assertTrue(g1_2.isEqual(t));
4521 t=mm.getGroupArr(0,"G2",False)
4522 self.assertTrue(g2_2.isEqual(t));
4523 t=mm.getGroupArr(-1,"G1",False)
4524 self.assertTrue(g1_1.isEqual(t));
4525 t=mm.getGroupArr(-1,"G2",False)
4526 self.assertTrue(g2_1.isEqual(t));
4527 t=mm.getGroupArr(1,"G1",False)
4528 self.assertTrue(g1_N.isEqual(t));
4529 t=mm.getGroupArr(1,"G2",False)
4530 self.assertTrue(g2_N.isEqual(t));
4531 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4532 t=mm.getGroupArr(0,"GrpOnAllCell")
4534 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4535 mm2=pickle.loads(st)
4536 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4537 self.assertEqual(mm.getAxisType(),AX_CART)
4539 mm.setAxisType(AX_CYL)
4540 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4541 mm2=pickle.loads(st)
4542 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4543 self.assertEqual(mm2.getAxisType(),AX_CYL)
4547 def testMEDFileFieldsLoadSpecificEntities1(self):
4550 fileName="Pyfile87.med"
4554 m=MEDCouplingCMesh()
4555 arr=DataArrayDouble(nbNodes) ; arr.iota()
4557 m=m.buildUnstructured()
4560 fmts=MEDFileFieldMultiTS()
4561 for i in range(nbPdt):
4562 f=MEDCouplingFieldDouble(ON_NODES)
4564 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4566 f.setName(fieldName)
4567 f.setTime(float(i),i,0)
4568 fmts.appendFieldNoProfileSBT(f)
4571 mm=MEDFileUMesh() ; mm[0]=m
4572 fmts.write(fileName,2)
4573 mm.write(fileName,0)
4575 fs=MEDFileFields(fileName,False)
4576 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4577 fs.loadArraysIfNecessary()
4578 fs2.loadArraysIfNecessary()
4579 for i in range(nbPdt):
4580 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4582 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4583 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4584 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4585 fmts=MEDFileFieldMultiTS()
4586 for i in range(nbPdt):
4587 f=MEDCouplingFieldDouble(ON_CELLS)
4589 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4591 f.setName(fieldName)
4592 f.setTime(float(i),i,0)
4593 fmts.appendFieldNoProfileSBT(f)
4595 mm=MEDFileUMesh() ; mm[0]=m3
4597 self.assertEqual(mm.getNonEmptyLevels(),())
4599 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4600 fmts.write(fileName,2)
4601 fs=MEDFileFields(fileName,False)
4602 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4603 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4604 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4605 fs.loadArraysIfNecessary()
4606 fs2.loadArraysIfNecessary()
4607 fs3.loadArraysIfNecessary()
4608 fs4.loadArraysIfNecessary()
4609 for i in range(nbPdt):
4610 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4611 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4612 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4617 def testMEDFileLotsOfTSRW1(self):
4620 fileName="Pyfile88.med"
4621 nbPdt=300 # <- perftest = 30000
4624 maxPdt=100 # <- optimum = 500
4625 m=MEDCouplingCMesh()
4626 arr=DataArrayDouble(nbNodes) ; arr.iota()
4628 m=m.buildUnstructured()
4631 nbOfField=nbPdt//maxPdt
4633 for j in range(nbOfField):
4634 fmts=MEDFileFieldMultiTS()
4635 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4636 for i in range(s.start, s.stop, s.step):
4637 f=MEDCouplingFieldDouble(ON_NODES)
4639 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4641 f.setName("%s_%d"%(fieldName,j))
4642 f.setTime(float(i),i,0)
4643 fmts.appendFieldNoProfileSBT(f)
4648 mm=MEDFileUMesh() ; mm[0]=m
4649 fs.write(fileName,2)
4650 mm.write(fileName,0)
4652 def appendInDict(d,key,val):
4659 allFields=GetAllFieldNames(fileName)
4661 pat=re.compile("([\d]+)([\s\S]+)$")
4662 for st in allFields:
4666 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4669 appendInDict(allFieldsDict,st,'')
4673 for k in allFieldsDict:
4674 if allFieldsDict[k]!=['']:
4675 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4678 for it in allFieldsDict[k]:
4679 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4684 for ii in range(nbIter):
4685 zeResu.pushBackTimeSteps(fmts2.pop())
4688 fs2.pushField(zeResu)
4690 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4694 def testMEDFileMeshRearrangeFamIds1(self):
4695 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4696 fileName="Pyfile89.med"
4697 meshName='Maillage_2'
4699 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)])
4701 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])
4702 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])
4703 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4704 m0.setConnectivity(c0,c0i)
4707 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])
4708 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])
4709 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4710 m1.setConnectivity(c1,c1i)
4713 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])
4714 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4715 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4716 mm[-2]=m2.buildUnstructured()
4718 ref0=DataArrayInt(55) ; ref0[:]=0
4719 mm.setFamilyFieldArr(0,ref0)
4720 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]))
4721 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])
4722 mm.setFamilyFieldArr(-1,ref1)
4723 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])
4724 mm.setFamilyFieldArr(-2,ref2)
4726 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4727 mm.setFamilyId(f,fid)
4728 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4729 mm.setFamiliesOnGroup(grp,fams)
4730 mm.write(fileName,2)
4732 mm=MEDFileMesh.New(fileName)
4733 grp=mm.getGroup(-1,"Groupe_1")
4734 dai=grp.computeFetchedNodeIds()
4737 mm.rearrangeFamilies() # <- the aim of the test
4738 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4739 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4740 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4741 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4742 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])))
4743 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4744 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4745 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4746 for elt,fams in allGrps:
4747 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4748 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4749 for elt,eltId in allFams:
4750 self.assertEqual(mm.getFamilyId(elt),eltId)
4754 def testNonRegrCMeshSetFieldPfl1(self):
4755 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4756 ff=MEDFileField1TS()
4759 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4763 field=MEDCouplingFieldDouble(ON_CELLS)
4765 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4766 field.setName("Field")
4767 field.checkConsistencyLight()
4768 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4769 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4770 self.assertEqual(ff.getPfls(),())
4771 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4772 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4773 del ff,mm,field,field2,pfl
4774 # same with unstructured mesh
4775 ff=MEDFileField1TS()
4778 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4781 m=m.buildUnstructured()
4783 field=MEDCouplingFieldDouble(ON_CELLS)
4785 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4786 field.setName("Field")
4787 field.checkConsistencyLight()
4788 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4789 ff.setFieldProfile(field,mm,0,pfl)
4790 self.assertEqual(ff.getPfls(),())
4791 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4792 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4796 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4798 fileName="Pyfile90.med"
4799 fileName2="Pyfile91.med"
4800 arr=DataArrayDouble(5) ; arr.iota()
4801 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4802 m=m.buildUnstructured()
4803 d=DataArrayInt([3,7,11,15])
4806 m2=m[d.buildComplement(m.getNumberOfCells())]
4807 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4808 m.changeSpaceDimension(3,0.)
4809 arr=DataArrayDouble(3) ; arr.iota()
4810 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4811 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4812 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4813 m3D=m.buildExtrudedMesh(m1D,0)
4814 m3D.sortCellsInMEDFileFrmt()
4815 m3D.setName(meshName)
4816 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4817 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4818 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4821 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4822 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4823 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4824 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4825 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4826 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4827 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4828 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4829 mm.setGroupsAtLevel(0,[vol1,vol2])
4830 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4831 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4833 mmOut1=mm.linearToQuadratic(0,0.)
4834 mmOut1.write(fileName2,2)
4835 mmOut2=mmOut1.quadraticToLinear(0.)
4836 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4840 def testMEDFileMeshAddGroup1(self):
4841 m=MEDCouplingCMesh()
4842 arrX=DataArrayDouble(9) ; arrX.iota()
4843 arrY=DataArrayDouble(4) ; arrY.iota()
4844 m.setCoords(arrX,arrY)
4848 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4850 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4852 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4854 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4856 for grp in [grp0,grp1,grp2,grp3]:
4857 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4858 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4860 for grp in [grp0,grp1,grp2,grp3]:
4861 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4862 mm.addGroup(1,grpNode)
4863 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4864 for grp in [grp0,grp1,grp2,grp3]:
4865 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4866 for grp in [grp0,grp1,grp2,grp3]:
4867 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4868 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4869 mm.normalizeFamIdsMEDFile()
4870 for grp in [grp0,grp1,grp2,grp3]:
4871 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4872 for grp in [grp0,grp1,grp2,grp3]:
4873 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4874 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4878 def testMEDFileJoint1(self):
4879 fileName="Pyfile92.med"
4880 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4881 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4885 mm.setDescription("un maillage")
4886 mm.write(fileName,2)
4887 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4888 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4889 one_step_joint=MEDFileJointOneStep()
4890 one_step_joint.pushCorrespondence(cell_correspond)
4891 one_step_joint.pushCorrespondence(node_correspond)
4892 one_joint=MEDFileJoint()
4893 one_joint.pushStep(one_step_joint)
4894 one_joint.setLocalMeshName("maa1")
4895 one_joint.setRemoteMeshName("maa1")
4896 one_joint.setDescription("joint_description")
4897 one_joint.setJointName("joint_1")
4898 one_joint.setDomainNumber(1)
4899 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4900 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4901 self.assertEqual( one_joint.getDescription(), "joint_description")
4902 self.assertEqual( one_joint.getJointName(), "joint_1")
4903 self.assertEqual( one_joint.getDomainNumber(), 1)
4904 joints=MEDFileJoints()
4905 joints.pushJoint(one_joint);
4906 joints.write(fileName,0)
4908 jointsR=MEDFileJoints(fileName,mm.getName())
4909 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4910 jR = jointsR.getJointAtPos(0)
4911 self.assertTrue( jR.isEqual( one_joint ))
4912 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4913 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4914 jointsR.destroyJointAtPos(0)
4918 def testMEDFileJoint2(self):
4919 fileNameWr="Pyfile93.med"
4920 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4921 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4925 mm.setDescription("un maillage")
4926 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4927 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4928 one_step_joint=MEDFileJointOneStep()
4929 two_step_joint=MEDFileJointOneStep()
4930 one_joint=MEDFileJoint()
4931 two_joint=MEDFileJoint()
4932 one_step_joint.pushCorrespondence(node_correspond)
4933 one_joint.pushStep(one_step_joint)
4934 two_step_joint.pushCorrespondence(cell_correspond)
4935 two_step_joint.pushCorrespondence(node_correspond)
4936 two_joint.pushStep(two_step_joint)
4937 one_joint.setLocalMeshName("maa1")
4938 one_joint.setRemoteMeshName("maa1")
4939 one_joint.setDescription("joint_description_1")
4940 one_joint.setJointName("joint_1")
4941 one_joint.setDomainNumber(1)
4942 two_joint.setLocalMeshName("maa1")
4943 two_joint.setRemoteMeshName("maa1")
4944 two_joint.setDescription("joint_description_2")
4945 two_joint.setJointName("joint_2")
4946 two_joint.setDomainNumber(2)
4947 joints=MEDFileJoints()
4948 joints.pushJoint(one_joint)
4949 joints.pushJoint(two_joint)
4950 mm.setJoints( joints )
4951 mm.write(fileNameWr,2)
4953 mm=MEDFileMesh.New(fileNameWr)
4954 self.assertEqual( mm.getNumberOfJoints(), 2)
4955 jointsR = mm.getJoints();
4956 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4957 self.assertEqual( len( jointsR ), 2 )
4958 jointR1 = jointsR[0]
4959 jointR2 = jointsR[1]
4960 self.assertFalse( jointR1 is None )
4961 self.assertFalse( jointR2 is None )
4962 self.assertTrue( jointR1.isEqual( one_joint ))
4963 self.assertTrue( jointR2.isEqual( two_joint ))
4967 def testMEDFileJoint1(self):
4968 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4969 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4970 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4971 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4972 joint1st_1=MEDFileJointOneStep()
4973 joint1st_1.pushCorrespondence(cell_correspond)
4974 joint1st_1.pushCorrespondence(node_correspond)
4975 joint1st_2=MEDFileJointOneStep()
4976 joint1st_2.pushCorrespondence(cell_correspond)
4977 joint1st_2.pushCorrespondence(node_correspond)
4978 joint1st_3=MEDFileJointOneStep()
4979 joint1st_3.pushCorrespondence(node_correspond)
4980 joint1st_3.pushCorrespondence(cell_correspond)
4981 joint1st_4=MEDFileJointOneStep()
4982 joint1st_4.pushCorrespondence(cell_correspond)
4983 joint1st_5=MEDFileJointOneStep()
4984 joint1st_5.pushCorrespondence(cell_correspon2)
4985 joint1st_6=MEDFileJointOneStep()
4986 joint1st_6.pushCorrespondence(cell_correspon3)
4987 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4988 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4989 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4990 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4991 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4992 self.assertEqual(1,joint1st_6.getNumberOfCorrespondences())
4993 joint1st_6.clearCorrespondences()
4994 self.assertEqual(0,joint1st_6.getNumberOfCorrespondences())
4995 one_joint=MEDFileJoint()
4996 one_joint.pushStep(joint1st_1)
4997 one_joint.setLocalMeshName("maa1")
4998 one_joint.setRemoteMeshName("maa2")
4999 one_joint.setDescription("joint_description")
5000 one_joint.setJointName("joint_1")
5001 one_joint.setDomainNumber(1)
5002 self.assertEqual( "maa1", one_joint.getLocalMeshName())
5003 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5004 self.assertEqual( "joint_description", one_joint.getDescription())
5005 self.assertEqual( 1, one_joint.getDomainNumber())
5006 self.assertEqual( "joint_1", one_joint.getJointName())
5007 one_joint_copy = one_joint.deepCopy()
5008 self.assertEqual( "maa1", one_joint_copy.getLocalMeshName())
5009 self.assertEqual( "maa2", one_joint_copy.getRemoteMeshName())
5010 self.assertEqual( "joint_description", one_joint_copy.getDescription())
5011 self.assertEqual( 1, one_joint_copy.getDomainNumber())
5012 self.assertEqual( "joint_1", one_joint_copy.getJointName())
5015 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5017 def testMEDFileSafeCall0(self):
5018 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5019 fname="Pyfile94.med"
5020 errfname="Pyfile94.err"
5023 # first clean file if needed
5024 if os.path.exists(fname):
5027 # second : build a file from scratch
5028 m=MEDCouplingCMesh()
5029 arr=DataArrayDouble(11) ; arr.iota()
5030 m.setCoords(arr,arr)
5035 # third : change permissions to remove write access on created file
5036 os.chmod(fname, 0o444)
5037 # four : try to append data on file -> check that it raises Exception
5038 f=MEDCouplingFieldDouble(ON_CELLS)
5041 f.setArray(DataArrayDouble(100))
5042 f.getArray()[:]=100.
5043 f.checkConsistencyLight()
5044 f1ts=MEDFileField1TS()
5045 f1ts.setFieldNoProfileSBT(f)
5047 tmp=StdOutRedirect(errfname)
5048 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5051 if os.path.exists(errfname):
5057 def testUnivStatus1(self):
5058 """ Non regression test to check the effectiveness of univ write status."""
5059 fname="Pyfile95.med"
5060 arr=DataArrayDouble(10) ; arr.iota()
5061 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5062 mm=MEDFileCMesh() ; mm.setMesh(m)
5063 mm.setUnivNameWrStatus(False) # test is here
5065 mm=MEDFileCMesh(fname)
5066 self.assertEqual(mm.getUnivName(),"")
5067 mm.setUnivNameWrStatus(True)
5069 mm=MEDFileCMesh(fname)
5070 self.assertTrue(mm.getUnivName()!="")
5074 def testEmptyMesh(self):
5075 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5077 fname = "Pyfile96.med"
5078 m = MEDCouplingUMesh('toto', 2)
5079 m.setCoords(DataArrayDouble([], 0, 2))
5080 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5081 mfu = MEDFileUMesh()
5082 mfu.setMeshAtLevel(0, m)
5084 mfu2 = MEDFileUMesh(fname)
5085 self.assertEqual('toto', mfu2.getName())
5086 lvl = mfu2.getNonEmptyLevels()
5087 self.assertEqual((), lvl)
5089 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5090 def testMEDFileUMeshPickeling2(self):
5091 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5097 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5098 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5099 mesh=MEDFileUMesh() ; mesh[0]=m
5100 m1=m.computeSkin() ; mesh[-1]=m1
5102 bary1=m1.computeCellCenterOfMass()[:,2]
5103 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5104 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5105 mesh.setGroupsAtLevel(-1,[grp1,grp2])
5107 st=pickle.dumps(mesh,2)
5109 st2=pickle.dumps(mm,2)
5110 mm2=pickle.loads(st2)
5111 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5115 def testMEDFileEquivalence1(self):
5116 """ First check of equivalence implementation in MEDFileMesh"""
5117 fileName="Pyfile97.med"
5120 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)])
5121 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5122 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])
5123 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5124 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])
5125 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5126 mm.getFamilyFieldAtLevel(-1)[:]=-2
5127 mm.getFamilyFieldAtLevel(0)[:]=0
5128 mm.addFamily("HOMARD________-1",-1)
5129 mm.addFamily("HOMARD________-2",-2)
5130 mm.addFamily("HOMARD________-3",-3)
5131 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5133 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5134 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."
5135 mm.initializeEquivalences()
5136 eqs=mm.getEquivalences()
5137 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5138 eq0.setDescription(descEq)
5139 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)])
5140 eq0.setArray(-1,corr)
5141 self.assertEqual(eq0.getCell().size(),1)
5142 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5143 eq0.getCell().clear()
5144 self.assertEqual(eq0.getCell().size(),0)
5145 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5146 self.assertEqual(eq0.getCell().size(),1)
5147 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5148 mm.killEquivalences()
5149 mm.initializeEquivalences()
5150 eqs=mm.getEquivalences()
5151 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5152 eq0.setDescription(descEq)
5154 c.setArrayForType(NORM_QUAD4,corr)
5155 self.assertEqual(eq0.getCell().size(),1)
5156 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5158 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5159 self.assertEqual(mm2.getEquivalences().size(),1)
5160 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5161 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5162 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5163 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5164 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5165 mm.write(fileName,2)
5167 mm3=MEDFileMesh.New(fileName)
5168 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5172 def testMEDFileForFamiliesPlayer1(self):
5173 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5174 fileName="Pyfile98.med"
5176 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5177 arr=DataArrayDouble(4) ; arr.iota()
5178 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5179 m=m.buildUnstructured()
5182 mm.setName(meshName)
5183 mm.setFamilyId("FAMILLE_ZERO",0)
5184 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5185 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5186 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5187 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5188 mm.setFamilyFieldArr(1,d)
5189 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5190 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5191 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5192 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5193 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5194 mm.write(fileName,2)
5195 # now read such funny file !
5196 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5197 self.assertTrue(mm.isEqual(mm2,1e-16))
5198 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5199 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5200 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5204 def testCartesianizer1(self):
5205 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5207 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5208 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5209 d0=DataArrayInt(16) ; d0[:]=0
5210 d1=DataArrayInt(9) ; d1[:]=0
5211 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5212 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5213 ref0=mm.getCoords().getHiddenCppPointer()
5214 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5215 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5216 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5217 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5218 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5219 mm.setAxisType(AX_CYL) #<- important
5220 mm2=mm.cartesianize() # the trigger
5221 self.assertEqual(mm2.getAxisType(),AX_CART)
5222 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5223 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5224 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5225 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5226 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5227 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5228 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5229 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5230 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5231 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5232 self.assertEqual(mm2.getName(),mm.getName())
5233 self.assertEqual(mm2.getDescription(),mm.getDescription())
5234 self.assertEqual(mm2.getTime(),mm.getTime())
5235 self.assertEqual(mm2.getTime(),mm.getTime())
5236 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5237 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5238 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5239 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5240 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5241 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5242 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5243 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5245 mm.setAxisType(AX_CART)
5246 mm2=mm.cartesianize() # the trigger
5247 self.assertEqual(mm2.getAxisType(),AX_CART)
5248 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5249 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5250 # CurveLinearMesh non cart
5251 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5252 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5253 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5254 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5255 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5256 mm2=mm.cartesianize() # the trigger
5257 self.assertEqual(mm2.getAxisType(),AX_CART)
5258 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5259 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5260 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5261 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5262 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5263 self.assertEqual(mm2.getName(),mm.getName())
5264 self.assertEqual(mm2.getDescription(),mm.getDescription())
5265 self.assertEqual(mm2.getTime(),mm.getTime())
5266 self.assertEqual(mm2.getTime(),mm.getTime())
5267 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5268 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5269 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5270 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5271 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5272 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5273 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5274 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5275 # CurveLinearMesh cart
5276 mm.setAxisType(AX_CART)
5277 mm2=mm.cartesianize() # the trigger
5278 self.assertEqual(mm2.getAxisType(),AX_CART)
5279 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5280 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5282 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5283 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5284 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5285 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5286 mm2=mm.cartesianize() # the trigger
5287 self.assertEqual(mm2.getAxisType(),AX_CART)
5288 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5289 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5290 self.assertEqual(mm2.getName(),mm.getName())
5291 self.assertEqual(mm2.getDescription(),mm.getDescription())
5292 self.assertEqual(mm2.getTime(),mm.getTime())
5293 self.assertEqual(mm2.getTime(),mm.getTime())
5294 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5295 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5296 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5297 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5298 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5299 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5300 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5301 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5303 mm.setAxisType(AX_CART)
5304 mm2=mm.cartesianize() # the trigger
5305 self.assertEqual(mm2.getAxisType(),AX_CART)
5306 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5307 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5311 def testCheckCoherency(self):
5312 m2 = MEDCouplingUMesh("2d", 2)
5313 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5314 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5315 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5316 mum = MEDFileUMesh()
5317 mum.setMeshAtLevel(0, m2)
5318 mum.setMeshAtLevel(-1, m1)
5319 mum.checkConsistency()
5320 mum2 = mum.deepCopy()
5323 arr = DataArrayInt([2]*4)
5324 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5325 self.assertRaises(InterpKernelException, mum.checkConsistency)
5326 mum=mum2; mum2=mum.deepCopy();
5327 arr = DataArrayInt([2]*4)
5328 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5329 self.assertRaises(InterpKernelException, mum.checkConsistency)
5330 mum=mum2; mum2=mum.deepCopy();
5331 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5332 self.assertRaises(InterpKernelException, mum.checkConsistency)
5333 mum=mum2; mum2=mum.deepCopy();
5334 arr = DataArrayAsciiChar(['tutu x']*4)
5335 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5336 self.assertRaises(InterpKernelException, mum.checkConsistency)
5339 mum=mum2; mum2=mum.deepCopy();
5340 arr = DataArrayInt([2]*2)
5341 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5342 self.assertRaises(InterpKernelException, mum.checkConsistency)
5343 mum=mum2; mum2=mum.deepCopy();
5344 arr = DataArrayInt([2]*2)
5345 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5346 self.assertRaises(InterpKernelException, mum.checkConsistency)
5347 mum=mum2; mum2=mum.deepCopy();
5348 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5349 self.assertRaises(InterpKernelException, mum.checkConsistency)
5350 mum=mum2; mum2=mum.deepCopy();
5351 arr = DataArrayAsciiChar(['tutu x']*2)
5352 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5353 self.assertRaises(InterpKernelException, mum.checkConsistency)
5356 mum=mum2; mum2=mum.deepCopy();
5357 arr = DataArrayInt([2]*5)
5358 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5359 self.assertRaises(InterpKernelException, mum.checkConsistency)
5360 mum=mum2; mum2=mum.deepCopy();
5361 arr = DataArrayInt([2]*5)
5362 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5363 self.assertRaises(InterpKernelException, mum.checkConsistency)
5364 mum=mum2; mum2=mum.deepCopy();
5365 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5366 self.assertRaises(InterpKernelException, mum.checkConsistency)
5367 mum=mum2; mum2=mum.deepCopy();
5368 arr = DataArrayAsciiChar(['tutu x']*5)
5369 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5370 self.assertRaises(InterpKernelException, mum.checkConsistency)
5373 def testCheckSMESHConsistency(self):
5374 m2 = MEDCouplingUMesh("2d", 2)
5375 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5376 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5377 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5378 mum = MEDFileUMesh()
5379 mum.setMeshAtLevel(0, m2)
5380 mum.setMeshAtLevel(-1, m1)
5381 mum.checkConsistency()
5382 mum.checkSMESHConsistency()
5383 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5384 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5385 mum.setRenumFieldArr(0, n2)
5386 mum.setRenumFieldArr(-1, n1)
5387 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5388 mum.setRenumFieldArr(-1, n1+100)
5389 mum.checkSMESHConsistency()
5393 def testClearNodeAndCellNumbers(self):
5394 m2 = MEDCouplingUMesh("2d", 2)
5395 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5396 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5397 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5398 mum = MEDFileUMesh()
5399 mum.setMeshAtLevel(0, m2)
5400 mum.setMeshAtLevel(-1, m1)
5401 mum.checkConsistency()
5402 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5403 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5404 mum.setRenumFieldArr(0, n2)
5405 mum.setRenumFieldArr(-1, n1)
5406 mum.clearNodeAndCellNumbers()
5407 mum.checkSMESHConsistency()
5411 def testCMeshSetFamilyFieldArrNull(self):
5413 fname="Pyfile99.med"
5414 arrX=DataArrayDouble([0,1,2,3])
5415 arrY=DataArrayDouble([0,1,2])
5416 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5417 mm=MEDFileCMesh() ; mm.setMesh(m)
5418 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5419 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5420 mm.setFamilyFieldArr(0,famCellIds)
5421 mm.setFamilyFieldArr(1,famNodeIds)
5423 mm=MEDFileMesh.New(fname)
5424 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5425 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5426 mm.setFamilyFieldArr(0,None)#<- bug was here
5427 mm.setFamilyFieldArr(1,None)#<- bug was here
5428 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5429 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5431 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5432 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5434 mm2=MEDFileMesh.New(fname)
5435 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5436 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5440 def testAppendFieldProfileOnIntField(self):
5441 fname="Pyfile100.med"
5442 arrX=DataArrayDouble([0,1,2,3])
5443 arrY=DataArrayDouble([0,1,2])
5444 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5448 fmts=MEDFileIntFieldMultiTS()
5450 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5451 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5452 fieldName="FieldOnCell"
5453 f.setTime(1.2,1,1) ; f.setName(fieldName)
5454 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5455 fmts.appendFieldProfile(f,mm,0,pfl)
5460 mm=MEDFileMesh.New(fname)
5461 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5462 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5463 self.assertEqual(fmts.getName(),fieldName)
5464 self.assertEqual(len(fmts),1)
5466 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5467 self.assertEqual(pfltest.getName(),pflName)
5468 self.assertEqual(ftest.getName(),fieldName)
5469 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5470 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5471 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5472 self.assertEqual(ftest2.getTime(),f.getTime())
5473 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5477 def testMEDFileFieldEasyField1(self):
5478 """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."""
5479 ## Basic test on cells on top level
5480 fname="Pyfile101.med"
5483 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5484 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5486 m.insertNextCell(NORM_TRI3,[0,1,2])
5487 m.insertNextCell(NORM_TRI3,[3,4,5])
5488 m.insertNextCell(NORM_TRI3,[6,7,8])
5489 m.insertNextCell(NORM_TRI3,[9,10,11])
5490 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5491 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5494 arr0=DataArrayDouble([10,11,12,13,100,101])
5495 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5496 f.setName(fieldName) ; f.setTime(2.,6,7)
5498 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5500 arr2=arr0+1000 ; f.setArray(arr2)
5501 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5505 mm=MEDFileMesh.New(fname)
5506 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5507 ftst0=f1ts.field(mm)
5508 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5509 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5510 ftst1=f1ts.field(mm)
5511 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5512 fmts=MEDFileFieldMultiTS(fname,fieldName)
5513 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5514 ## Basic test on nodes on top level
5515 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5516 f2.setName(fieldName)
5518 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5520 mm=MEDFileMesh.New(fname)
5521 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5522 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5523 fmts=MEDFileFieldMultiTS(fname,fieldName)
5524 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5526 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)
5527 f3.setName(fieldName) ; f3.checkConsistencyLight()
5528 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5530 mm=MEDFileMesh.New(fname)
5531 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5532 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5534 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5535 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])
5536 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)
5537 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)
5538 f4.checkConsistencyLight()
5539 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5541 mm=MEDFileMesh.New(fname)
5542 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5543 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5547 def testMEDFileFieldEasyField2(self):
5548 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5549 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."""
5550 ## Basic test on cells on top level
5551 fname="Pyfile102.med"
5554 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5555 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5557 m.insertNextCell(NORM_TRI3,[0,1,2])
5558 m.insertNextCell(NORM_TRI3,[3,4,5])
5559 m.insertNextCell(NORM_TRI3,[6,7,8])
5560 m.insertNextCell(NORM_TRI3,[9,10,11])
5561 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5562 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5565 arr0=DataArrayInt32([10,11,12,13,100,101])
5566 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5567 f.setName(fieldName) ; f.setTime(2.,6,7)
5569 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5571 arr2=arr0+1000 ; f.setArray(arr2)
5572 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5576 mm=MEDFileMesh.New(fname)
5577 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5578 ftst0=f1ts.field(mm)
5579 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5580 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5581 ftst1=f1ts.field(mm)
5582 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5583 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5584 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5585 ## Basic test on nodes on top level
5586 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5587 f2.setName(fieldName)
5589 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5591 mm=MEDFileMesh.New(fname)
5592 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5593 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5594 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5595 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5597 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)
5598 f3.setName(fieldName) ; f3.checkConsistencyLight()
5599 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5601 mm=MEDFileMesh.New(fname)
5602 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5603 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5605 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5606 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])
5607 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)
5608 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)
5609 f4.checkConsistencyLight()
5610 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5612 mm=MEDFileMesh.New(fname)
5613 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5614 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5618 def testMEDFileFieldEasyField3(self):
5619 """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."""
5620 fname="Pyfile103.med"
5623 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5624 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5626 m.insertNextCell(NORM_TRI3,[0,1,2])
5627 m.insertNextCell(NORM_TRI3,[3,4,5])
5628 m.insertNextCell(NORM_TRI3,[6,7,8])
5629 m.insertNextCell(NORM_TRI3,[9,10,11])
5630 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5631 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5633 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5635 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5636 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5640 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5641 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5643 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5644 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5645 # here f1 lying on level -1 not 0 check if "field" method detect it !
5646 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5647 f1.setMesh(mm[-1]) # -1 is very important
5649 f1.checkConsistencyLight()
5651 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5653 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5654 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5656 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5657 f3.setMesh(mm[-1]) # this line is important
5658 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)
5659 f3.setName(fieldName) ; f3.checkConsistencyLight()
5660 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5662 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5663 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5665 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5666 f4.setMesh(mm[-1]) # this line is important
5667 f4.setName(fieldName)
5668 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])
5669 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)
5670 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)
5671 f4.checkConsistencyLight()
5672 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5673 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5674 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5678 def testMEDFileFieldEasyField4(self):
5679 """ Same than testMEDFileFieldEasyField3 but with integers"""
5680 fname="Pyfile104.med"
5683 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5684 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5686 m.insertNextCell(NORM_TRI3,[0,1,2])
5687 m.insertNextCell(NORM_TRI3,[3,4,5])
5688 m.insertNextCell(NORM_TRI3,[6,7,8])
5689 m.insertNextCell(NORM_TRI3,[9,10,11])
5690 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5691 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5693 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5695 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5696 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5700 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5701 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5703 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5704 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5705 # here f1 lying on level -1 not 0 check if "field" method detect it !
5706 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5707 f1.setMesh(mm[-1]) # -1 is very important
5709 f1.checkConsistencyLight()
5711 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5713 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5714 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5716 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5717 f3.setMesh(mm[-1]) # this line is important
5718 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)
5719 f3.setName(fieldName) ; f3.checkConsistencyLight()
5720 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5722 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5723 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5725 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5726 f4.setMesh(mm[-1]) # this line is important
5727 f4.setName(fieldName)
5728 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])
5729 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)
5730 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)
5731 f4.checkConsistencyLight()
5732 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5733 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5734 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5738 def testMEDFileFieldEasyField5(self):
5739 """More and more difficult now look at how profiles are managed by "field" method."""
5740 fname="Pyfile105.med"
5743 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5744 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5746 m.insertNextCell(NORM_TRI3,[0,1,2])
5747 m.insertNextCell(NORM_TRI3,[3,4,5])
5748 m.insertNextCell(NORM_TRI3,[6,7,8])
5749 m.insertNextCell(NORM_TRI3,[9,10,11])
5750 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5751 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5754 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5755 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5757 arr0=DataArrayDouble([10,11,12,13])
5758 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5759 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5760 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5763 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5764 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5765 # more complicated -> multi level
5766 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5768 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5769 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5771 mm2[0]=m0 ; mm2[-1]=m
5773 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5775 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5776 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5780 def testExtractPart1(self):
5781 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)])
5783 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5784 m0.insertNextCell(NORM_TRI3,[8,4,3])
5785 m0.insertNextCell(NORM_TRI3,[8,9,4])
5786 m0.insertNextCell(NORM_TRI3,[7,13,8])
5787 m0.insertNextCell(NORM_TRI3,[7,12,13])
5788 m0.insertNextCell(NORM_TRI3,[0,6,1])
5789 m0.insertNextCell(NORM_TRI3,[0,5,6])
5790 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5791 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5792 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5793 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5794 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5796 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5797 m1.insertNextCell(NORM_SEG2,[10,5])
5798 m1.insertNextCell(NORM_SEG2,[5,0])
5799 m1.insertNextCell(NORM_SEG2,[0,1])
5800 m1.insertNextCell(NORM_SEG2,[1,2])
5801 m1.insertNextCell(NORM_SEG2,[2,3])
5802 m1.insertNextCell(NORM_SEG2,[3,4])
5803 m1.insertNextCell(NORM_SEG2,[4,9])
5804 m1.insertNextCell(NORM_SEG2,[9,14])
5805 m1.insertNextCell(NORM_SEG2,[14,13])
5806 m1.insertNextCell(NORM_SEG2,[13,12])
5807 m1.insertNextCell(NORM_SEG2,[12,11])
5808 m1.insertNextCell(NORM_SEG2,[11,10])
5810 mm[0]=m0 ; mm[-1]=m1
5811 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5813 tab[0]=DataArrayInt([0,2,3,4,6,7])
5814 tab[-1]=DataArrayInt([2,3,4,5,9])
5816 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5820 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5823 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5824 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5825 f0.setMesh(m0) ; f0.setName(fname0)
5826 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5827 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5828 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]))
5829 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5830 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5831 fmts.pushBackTimeStep(f1ts)
5833 mmOut=mm.extractPart(tab)
5835 fsPart0=fs.extractPart(tab,mm)
5836 self.assertEqual(len(fsPart0),1)
5838 self.assertEqual(len(fmtsP),1)
5840 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5842 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5843 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5845 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5846 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5847 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5848 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5849 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5851 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5852 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5853 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5854 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5855 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5856 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5857 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5858 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5859 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5860 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5862 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5863 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5864 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5866 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5867 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5868 for i,tt in enumerate(tss):
5869 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5870 myarr=arr0_0+i*1000.
5872 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5873 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5875 fsPart1=fs.extractPart(tab,mm)
5876 self.assertEqual(len(fsPart1),1)
5878 self.assertEqual(len(fmtsP),len(tss))
5879 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5880 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5881 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5882 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5883 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5884 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5885 self.assertEqual(fPart.getTime(),list(tt))
5890 def testSymmetryPlusAggregationMFD1(self):
5891 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5892 fname1="Pyfile106_1.med"
5893 fname2="Pyfile106_2.med"
5894 fname3="Pyfile106_3.med"
5897 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5899 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5900 mm1_0.setCoords(da1)
5901 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5902 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5903 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5904 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5905 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5907 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5908 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5910 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5911 mm1_1.setCoords(da1)
5912 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5913 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5914 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5915 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5916 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5917 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5919 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5920 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5921 for i in range(1,10):
5922 mm1.setFamilyId("F%d"%i,i)
5923 mm1.setFamilyId("FAMILLE_ZERO",0)
5924 mm1.setFamilyId("H1",100)
5925 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5926 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5927 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5928 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5931 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]"])
5933 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5934 mm2_0.setCoords(da1)
5935 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5936 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5937 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5938 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5940 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5941 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5943 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5944 mm2_1.setCoords(da1)
5945 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5946 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5947 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5948 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5949 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5950 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5951 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5952 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5954 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5955 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5956 for i in range(1,12):
5957 mm2.setFamilyId("G%d"%i,i+30)
5958 mm2.setFamilyId("H1",100)
5959 mm2.setFamilyId("FAMILLE_ZERO",0)
5960 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5961 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5962 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5963 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5965 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5967 def CheckMesh(tester,mm):
5968 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]"])
5969 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5970 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])))
5971 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5972 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])))
5973 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5974 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5975 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5976 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5977 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5978 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)]
5979 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5980 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5981 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5982 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5989 infoc=["dd [W]","eee [kA]"]
5991 fmts1=MEDFileFieldMultiTS()
5992 f1ts1=MEDFileField1TS()
5993 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5994 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5995 arr1.setInfoOnComponents(infoc)
5996 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5997 f1_1.checkConsistencyLight()
5998 f1ts1.setFieldNoProfileSBT(f1_1)
6000 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
6001 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
6002 arr2.setInfoOnComponents(infoc)
6003 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
6004 f1_2.checkConsistencyLight()
6005 f1ts1.setFieldNoProfileSBT(f1_2)
6006 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6007 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6008 arr3.setInfoOnComponents(infoc)
6009 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6010 f1_3.checkConsistencyLight()
6011 f1ts1.setFieldNoProfileSBT(f1_3)
6012 fmts1.pushBackTimeStep(f1ts1)
6014 f1ts2=f1ts1.deepCopy()
6015 f1ts2.setTime(t2[1],t2[2],t2[0])
6016 f1ts2.getUndergroundDataArray()[:]+=2000
6017 fmts1.pushBackTimeStep(f1ts2)
6019 fmts2=MEDFileFieldMultiTS()
6020 f1ts3=MEDFileField1TS()
6021 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6022 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6023 arr4.setInfoOnComponents(infoc)
6024 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6025 f2_1.checkConsistencyLight()
6026 f1ts3.setFieldNoProfileSBT(f2_1)
6027 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6028 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6029 arr5.setInfoOnComponents(infoc)
6030 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6031 f2_2.checkConsistencyLight()
6032 f1ts3.setFieldNoProfileSBT(f2_2)
6033 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6034 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6035 arr6.setInfoOnComponents(infoc)
6036 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6037 f2_3.checkConsistencyLight()
6038 f1ts3.setFieldNoProfileSBT(f2_3)
6039 fmts2.pushBackTimeStep(f1ts3)
6041 f1ts4=f1ts3.deepCopy()
6042 f1ts4.setTime(t2[1],t2[2],t2[0])
6043 f1ts4.getUndergroundDataArray()[:]+=2000
6044 fmts2.pushBackTimeStep(f1ts4)
6047 mfd1.setMeshes(MEDFileMeshes())
6048 mfd1.getMeshes().pushMesh(mm1)
6049 mfd1.setFields(MEDFileFields())
6050 mfd1.getFields().pushField(fmts1)
6053 mfd2.setMeshes(MEDFileMeshes())
6054 mfd2.getMeshes().pushMesh(mm2)
6055 mfd2.setFields(MEDFileFields())
6056 mfd2.getFields().pushField(fmts2)
6058 mfd=MEDFileData.Aggregate([mfd1,mfd2])
6059 def CheckMFD(tester,mfd):
6060 tester.assertEqual(len(mfd.getMeshes()),1)
6061 tester.assertEqual(len(mfd.getFields()),1)
6062 CheckMesh(self,mfd.getMeshes()[0])
6063 tester.assertEqual(len(mfd.getFields()[0]),2)
6064 zeF1=mfd.getFields()[0][0]
6065 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6066 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6067 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6068 ref.renumberCells(o2n)
6069 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6070 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6071 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6072 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6073 ref.renumberCells(o2n)
6074 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6075 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6076 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6077 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6078 ref.renumberCells(o2n)
6079 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6081 zeF2=mfd.getFields()[0][1]
6082 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6083 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6084 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6085 ref.renumberCells(o2n)
6086 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6087 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6088 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6089 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6090 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6091 ref.renumberCells(o2n)
6092 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6093 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6094 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6095 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6096 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6097 ref.renumberCells(o2n)
6098 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6099 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6101 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6102 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6107 def testAggregateWithGroups(self):
6108 """ Testing MEDFileUMesh::Aggretate when groups are present. """
6109 def generate(grp_name, offset):
6110 coo = DataArrayDouble([0., 1., 2.])
6112 m = MEDCouplingCMesh("toto")
6113 m.setCoords(coo, coo)
6114 m = m.buildUnstructured()
6115 mu = MEDFileUMesh.New()
6116 mu.setMeshAtLevel(0, m)
6117 g = DataArrayInt([0])
6119 g2 = DataArrayInt([1])
6120 g2.setName("common") # make a common group for all meshes being merged
6121 mu.setGroupsAtLevel(0, [g, g2])
6124 m1 = generate("A", 0.)
6125 m2 = generate("B", 2.)
6126 mm = MEDFileUMesh.Aggregate([m1,m2])
6128 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6129 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6130 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6131 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6132 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6133 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6134 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6135 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6136 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6141 def testExtrudedMesh1(self):
6142 fname="Pyfile107.med"
6143 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6144 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6145 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6148 ex2=mm.convertToExtrudedMesh()
6149 mm2=MEDFileMesh.New(fname)
6150 ex3=mm2.convertToExtrudedMesh()
6151 self.assertTrue(ex.isEqual(ex2,1e-12))
6152 self.assertTrue(ex.isEqual(ex3,1e-12))
6155 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6157 def testWriteInto30(self):
6158 fname="Pyfile108.med"
6159 fname2="Pyfile109.med"
6160 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6161 mm=MEDFileUMesh() ; mm[0]=m
6162 mm.setFamilyId("FAMILLE_ZERO",0)
6165 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6166 mm2=MEDFileUMesh(fname)
6167 self.assertTrue(mm.isEqual(mm2,1e-12))
6170 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
6173 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6175 def testPickelizationOfMEDFileObjects1(self):
6176 fname="Pyfile110.med"
6177 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)
6178 m0=MEDCouplingUMesh("Mesh",2)
6180 m0.insertNextCell(NORM_TRI3,[1,4,2])
6181 m0.insertNextCell(NORM_TRI3,[4,5,2])
6182 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6183 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6184 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6185 m0.finishInsertingCells()
6187 m1=MEDCouplingUMesh(m0.getName(),1)
6189 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6191 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6193 m1.finishInsertingCells()
6197 m.setMeshAtLevel(0,m0)
6198 m.setMeshAtLevel(-1,m1)
6200 dt=3 ; it=2 ; tim=4.5
6201 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6202 fieldNode0.setName("fieldNode0")
6203 fieldNode0.setTime(tim,dt,it)
6204 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6205 arr=DataArrayDouble([10,11,12,13,14])
6206 fieldNode0.setArray(arr)
6207 f0=MEDFileField1TS()
6208 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6209 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6210 fieldNode1.setName("fieldNode1")
6211 fieldNode1.setTime(tim,dt,it)
6212 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6213 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6214 fieldNode1.setArray(arr1)
6215 f1=MEDFileField1TS()
6216 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6218 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6219 mfd.getMeshes().pushMesh(m)
6220 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6221 mfd.getFields().pushField(fmts)
6222 # first start gently
6225 self.assertEqual(len(mfd2.getMeshes()),1)
6226 self.assertEqual(len(mfd2.getFields()),1)
6227 self.assertEqual(len(mfd2.getFields()[0]),1)
6228 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6229 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6230 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6231 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6232 # OK now end of joke -> serialization of MEDFileData
6233 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6234 mfd3=pickle.loads(st)
6236 self.assertEqual(len(mfd3.getMeshes()),1)
6237 self.assertEqual(len(mfd3.getFields()),1)
6238 self.assertEqual(len(mfd3.getFields()[0]),1)
6239 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6240 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6241 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6242 # serialization of MEDFileFields
6243 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6244 fs4=pickle.loads(st)
6245 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6246 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6247 # serialization of MEDFileFieldMulitTS
6248 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6249 fmts5=pickle.loads(st)
6250 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6251 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6252 # serialization of MEDFileField1TS
6253 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6254 f1ts6=pickle.loads(st)
6255 ff6=f1ts6.field(mfd3.getMeshes()[0])
6256 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6257 # serialization of MEDFileMeshes
6258 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6259 ms7=pickle.loads(st)
6260 self.assertEqual(len(ms7),1)
6261 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6264 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6266 def testPickelizationOfMEDFileObjects2(self):
6268 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6269 mm=MEDFileMesh.New("MEDFileMesh5.med")
6270 self.assertTrue(isinstance(mm,MEDFileCMesh))
6271 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6272 mm2=pickle.loads(st)
6273 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6274 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6276 self.internalCurveLinearMesh1() # generates Pyfile55.med
6277 mm=MEDFileMesh.New("Pyfile55.med")
6278 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6279 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6280 mm3=pickle.loads(st)
6281 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6282 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6283 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6284 # MEDFileIntFieldMultiTS
6285 fs4=MEDFileFields("Pyfile63.med")
6286 ms4=MEDFileMeshes("Pyfile63.med")
6287 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6288 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6289 fmts5=pickle.loads(st)
6290 self.assertEqual(len(fs4[0]),len(fmts5))
6291 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6292 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6293 # MEDFileIntField1TS
6294 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6295 f1ts6=pickle.loads(st)
6296 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6297 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6299 self.internalParameters1()# generates Pyfile56.med
6300 params=MEDFileParameters("Pyfile56.med")
6301 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6302 params7=pickle.loads(st)
6303 self.assertEqual(len(params),len(params7))
6304 for i in range(len(params)):
6305 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6310 def testGlobalNumOnNodes1(self):
6311 """Test global number on nodes here. Used by partitionners."""
6312 fname="Pyfile112.med"
6313 arr=DataArrayDouble(5) ; arr.iota()
6314 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6318 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6319 d=DataArrayInt([7,8,9,2,0])
6321 mm.setGlobalNumFieldAtLevel(1,d)
6322 mm.checkConsistency()
6323 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6324 mm.checkConsistency()
6325 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6326 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6328 mm2=MEDFileMesh.New(fname)
6329 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6330 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6331 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6332 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6333 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6334 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6338 def testPartialReadOfEntities1(self):
6339 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6340 fname="Pyfile113.med"
6341 arr=DataArrayDouble(5) ; arr.iota()
6342 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6349 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6350 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6352 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6353 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6355 f1ts=MEDFileField1TS()
6356 f1ts.setFieldNoProfileSBT(f1)
6357 f1ts.setFieldNoProfileSBT(f2)
6358 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6359 f1ts_2=f1ts.deepCopy()
6360 f1ts_2.getUndergroundDataArray()[:]+=2
6361 f1ts_2.setTime(3,4,6.)
6362 fmts=MEDFileFieldMultiTS()
6363 fmts.pushBackTimeStep(f1ts)
6364 fmts.pushBackTimeStep(f1ts_2)
6369 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6370 mm=MEDFileMesh.New(fname)
6371 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)
6373 self.assertEqual(len(fs),1)
6375 self.assertEqual(len(fmts),2)
6376 ff0=fmts[0] ; ff1=fmts[1]
6377 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6378 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6379 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6380 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6384 def testFloat32InMEDFileFieldStar1(self):
6385 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6386 fname="Pyfile114.med"
6387 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6388 f1=f1.convertToFloatField()
6390 mm1=MEDFileUMesh.New()
6391 mm1.setCoords(m1.getCoords())
6392 mm1.setMeshAtLevel(0,m1)
6393 mm1.setName(m1.getName())
6395 ff1=MEDFileFloatField1TS()
6396 ff1.setFieldNoProfileSBT(f1)
6397 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6398 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6399 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6401 a,b=ff1.getUndergroundDataArrayExt()
6402 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6403 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6404 ff2=MEDFileAnyTypeField1TS.New(fname)
6405 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6406 self.assertEqual(ff2.getTime(),[0,1,2.0])
6407 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6408 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6409 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6410 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6412 c=ff2.getUndergroundDataArray() ; c*=2
6413 ff2.write(fname,0) # 2 time steps in
6414 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6415 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6416 self.assertEqual(len(ffs1),2)
6417 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6418 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6419 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6420 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6421 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6422 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6423 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6424 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6425 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6426 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6427 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6429 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6432 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6433 nf1=MEDCouplingFieldFloat(ON_NODES)
6434 nf1.setTime(9.,10,-1)
6435 nf1.setMesh(f1.getMesh())
6436 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6437 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6438 nff1=MEDFileFloatField1TS.New()
6439 nff1.setFieldNoProfileSBT(nf1)
6440 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6441 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6444 nf2=MEDCouplingFieldFloat(ON_NODES)
6445 nf2.setTime(19.,20,-11)
6446 nf2.setMesh(f1.getMesh())
6447 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6448 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6449 nff2=MEDFileFloatField1TS.New()
6450 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6451 nff2.setFieldProfile(nf2,mm1,0,npfl)
6452 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6453 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6454 self.assertTrue(b.isEqual(npfl))
6455 self.assertTrue(a.isEqual(narr2,1e-7))
6457 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6458 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6459 self.assertTrue(b.isEqual(npfl))
6460 self.assertTrue(a.isEqual(narr2,1e-7))
6462 nf3=MEDCouplingFieldDouble(ON_NODES)
6463 nf3.setName("VectorFieldOnNodesDouble")
6464 nf3.setTime(29.,30,-21)
6465 nf3.setMesh(f1.getMesh())
6466 nf3.setArray(f1.getMesh().getCoords())
6467 nff3=MEDFileField1TS.New()
6468 nff3.setFieldNoProfileSBT(nf3)
6470 fs=MEDFileFields(fname)
6471 self.assertEqual(len(fs),4)
6472 ffs=[it for it in fs]
6473 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6474 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6475 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6476 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6478 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6479 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6480 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6481 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6482 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6484 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6485 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6486 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6487 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6488 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6489 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6490 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6491 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6493 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6494 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6495 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6496 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6500 def testPenta18_1(self):
6501 """EDF8478 : Test of read/write of penta18"""
6502 fname="Pyfile115.med"
6503 arr=DataArrayDouble([
6504 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6505 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6506 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6507 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6508 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6509 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6510 m=MEDCouplingUMesh("mesh",3)
6513 m.insertNextCell(NORM_PENTA18,list(range(18)))
6514 m.checkConsistencyLight()
6516 f=MEDCouplingFieldDouble(ON_NODES)
6518 f.setName("FieldOnPenta18")
6519 f.setArray(DataArrayDouble(list(range(18))))
6520 f.checkConsistencyLight()
6522 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6524 f2=MEDCouplingFieldDouble(ON_NODES)
6526 f2.setName("FieldOnPenta18Sub")
6527 f2.setArray(DataArrayDouble(list(range(18))))
6528 f2.checkConsistencyLight()
6529 WriteField(fname,f2,True)
6531 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6532 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6533 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6537 def testFieldsLinearToQuadratic(self):
6538 fname="Pyfile117.med"
6539 arr=DataArrayDouble([0,1])
6540 m=MEDCouplingCMesh();
6541 m.setCoords(arr,arr,arr)
6542 m=m.buildUnstructured()
6544 m2.translate([2,0,0])
6545 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6549 mmq=mm.linearToQuadratic(0)
6550 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6551 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6553 f=MEDCouplingFieldDouble(ON_NODES)
6557 arr=DataArrayDouble(m3.getNumberOfNodes())
6560 f1ts=MEDFileField1TS()
6561 f1ts.setFieldNoProfileSBT(f)
6562 fmts=MEDFileFieldMultiTS()
6563 fmts.pushBackTimeStep(f1ts)
6564 f1ts_2=f1ts.deepCopy()
6565 f1ts_2.setTime(3,4,5.)
6566 f1ts_2.getUndergroundDataArray()[:]*=2.
6567 fmts.pushBackTimeStep(f1ts_2)
6570 fs2=fs.linearToQuadratic(mms,mmsq)
6571 self.myTester1(fs2,mmsq[0])
6572 # A small Write/Read and test again
6573 mms.write(fname,2) ; fs.write(fname,0)
6574 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6575 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6576 fs2=fs.linearToQuadratic(mms,mmqs)
6577 self.myTester1(fs2,mmqs[0])
6580 def myTester1(self,fs2,mmq):
6581 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)
6582 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])
6583 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])
6584 fToTest=fs2[0][0].field(mmq)
6585 self.assertEqual(fToTest.getTime(),[3.,1,2])
6586 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6587 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6588 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6589 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6590 # testing 2nd timestep
6591 fToTest=fs2[0][1].field(mmq)
6592 self.assertEqual(fToTest.getTime(),[5.,3,4])
6593 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6594 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6595 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6596 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6600 def testFieldsLinearToQuadratic2(self):
6601 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6602 GeneratePyfile18(self)
6603 fname="Pyfile118.med"
6604 arr=DataArrayDouble([0,1])
6605 m=MEDCouplingCMesh();
6606 m.setCoords(arr,arr,arr)
6607 m=m.buildUnstructured()
6609 m2.translate([2,0,0])
6610 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6612 # add a point for fun
6613 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6617 mmq=mm.linearToQuadratic(0)
6618 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6619 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6621 f=MEDCouplingFieldDouble(ON_NODES)
6625 arr=DataArrayDouble(8) ; arr.iota()
6628 f1ts=MEDFileField1TS()
6629 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6630 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6631 f1ts_2=f1ts.deepCopy()
6632 f1ts_2.setTime(3,4,5.)
6633 f1ts_2.getUndergroundDataArray()[:]*=4.
6634 fmts=MEDFileFieldMultiTS()
6635 fmts.pushBackTimeStep(f1ts)
6636 fmts.pushBackTimeStep(f1ts_2)
6639 fs2=fs.linearToQuadratic(mms,mmsq)
6640 mms.write(fname,2) ; fs.write(fname,0)
6642 self.myTester2(fs2,mmq)
6644 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6645 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6646 fs2=fs.linearToQuadratic(mms,mmqs)
6647 self.myTester2(fs2,mmq)
6648 ## More vicious add single node 16
6651 mmq=mm.linearToQuadratic(0)
6652 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6653 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6655 f=MEDCouplingFieldDouble(ON_NODES)
6659 arr=DataArrayDouble(9) ; arr.iota()
6662 f1ts=MEDFileField1TS()
6663 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6664 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6665 fmts=MEDFileFieldMultiTS()
6666 fmts.pushBackTimeStep(f1ts)
6669 fs2=fs.linearToQuadratic(mms,mmsq)
6671 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")
6672 f1tsToTest=fs2[0][0]
6673 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])
6674 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6675 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6676 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6679 def myTester2(self,fs2,mmq):
6680 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")
6681 f1tsToTest=fs2[0][0]
6682 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])
6683 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6684 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6685 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6686 fToTest=fs2[0][0].field(mmq)
6687 self.assertEqual(fToTest.getTime(),[3.,1,2])
6688 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6689 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])))
6690 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))
6691 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6693 f1tsToTest=fs2[0][1]
6694 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6695 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6696 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6697 fToTest=fs2[0][1].field(mmq)
6698 self.assertEqual(fToTest.getTime(),[5.,3,4])
6699 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6700 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])))
6701 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))
6702 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6707 def testSetFieldProfileFlatly1(self):
6708 """ 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
6710 arr=DataArrayDouble(10) ; arr.iota()
6711 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6712 m=m.buildUnstructured()
6715 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6719 f=MEDCouplingFieldDouble(ON_CELLS)
6721 arr=DataArrayDouble(m.getNumberOfCells())
6725 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6727 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6728 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6730 f1ts=MEDFileField1TS()
6731 f1ts.setFieldProfile(f,mm,0,pfl)
6732 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6733 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6734 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6736 f1ts=MEDFileField1TS()
6737 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6738 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6739 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6740 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6741 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6742 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6746 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6747 """ Here multi level groups are created"""
6748 arr=DataArrayDouble(11) ; arr.iota()
6749 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6750 m=m.buildUnstructured()
6752 m1=m.buildDescendingConnectivity()[0]
6757 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6758 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6759 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6760 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6761 ################ ajouter un groupe sur plusieurs niveau
6763 mm.addGroup(-1,grp2)
6764 mm.addGroup(0,grp0_0)
6765 mm.addGroup(-1,grp0_1)
6766 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6767 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6768 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6769 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6770 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6771 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6772 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6773 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6774 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6775 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6776 mm.removeGroupAtLevel(0,grpName)
6777 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6778 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6779 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6780 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6781 mm.removeGroupAtLevel(-1,grpName)
6782 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6783 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6784 mm.addGroup(-1,grp0_1)
6785 mm.addGroup(0,grp0_0)
6786 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6787 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6788 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6789 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6790 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6794 def testYutaka(self):
6795 """ 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...
6796 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6798 m=MEDCouplingCMesh()
6799 arr=DataArrayDouble(4) ; arr.iota()
6800 m.setCoords(arr,arr,arr)
6801 m=m.buildUnstructured()
6804 m=m.buildUnstructured()
6805 m1=m.buildDescendingConnectivity()[0]
6811 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6813 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6815 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6817 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6818 mm.addGroup(-1,grp3)
6819 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6820 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6821 mm.addNodeGroup(grp4)
6822 mm.rearrangeFamilies()
6823 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6824 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6825 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6826 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6827 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6829 for grp in [grp0,grp1,grp2,grp3,grp4]:
6830 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6835 def testContxtMger1TS(self):
6836 fname="Pyfile119.med"
6837 coo=DataArrayDouble(1000) ; coo.iota()
6838 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6840 WriteMesh(fname,m,True)
6841 f=MEDCouplingFieldDouble(ON_CELLS)
6844 arr=DataArrayDouble(m.getNumberOfCells())
6846 f.checkConsistencyLight()
6849 f.setTime(float(i),i,0)
6850 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6853 mm=MEDFileMesh.New(fname)
6854 fmts=MEDFileFieldMultiTS(fname,False)
6855 refSize=fmts.getHeapMemorySize()
6861 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6864 def testZipFamilies1(self):
6866 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6869 arr=DataArrayDouble(10) ; arr.iota()
6870 m=MEDCouplingCMesh()
6871 m.setCoords(arr,arr)
6872 m=m.buildUnstructured()
6877 for i in range(m.getNumberOfCells()):
6878 d = DataArrayInt([i])
6879 d.setName("grp%d"%i)
6883 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6884 grp_all.setName("grp_all")
6885 mm.addGroup(0,grp_all)
6886 for i in range(m.getNumberOfCells()):
6887 mm.removeGroup("grp{}".format(i))
6890 mm.zipFamilies() # the method to test
6892 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6893 self.assertEqual(len(mm.getFamiliesNames()),1)
6894 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6897 def testZipFamilies2(self):
6899 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6902 arr=DataArrayDouble(21) ; arr.iota()
6903 m=MEDCouplingCMesh()
6905 m=m.buildUnstructured()
6910 # 1 and 3 to be merged
6911 # 2 and 5 to be merged
6912 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6913 for i in range(1,9):
6914 mm.setFamilyId("Fam_{}".format(i),-i)
6915 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6916 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6917 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6919 grp0=DataArrayInt([0,1,3,8,10,19])
6920 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6921 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6922 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6923 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6924 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6925 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6927 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6928 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6929 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6930 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6931 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6934 def testMeshConvertFromMEDFileGeoType(self):
6935 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6938 def testFieldInt64_0(self):
6940 Small basic test with I/O of field in int64.
6942 fname="Pyfile120.med"
6943 arr = DataArrayDouble([0,1])
6944 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6945 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6946 v = 1234567890123456
6947 f.setArray(DataArrayInt64([v]))
6951 f1ts = MEDFileInt64Field1TS()
6952 f1ts.setFieldNoProfileSBT(f)
6953 fmts = MEDFileInt64FieldMultiTS()
6954 fmts.pushBackTimeStep(f1ts)
6955 fs = MEDFileFields()
6960 mm = MEDFileMesh.New(fname)
6961 fs = MEDFileFields(fname)
6962 f = fs[0][0].field(mm)
6963 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6964 self.assertEqual( f.getArray().getIJ(0,0) , v )
6967 def testNonRegUMeshSubParts(self):
6969 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6971 fname = "Pyfile121.med"
6972 m0 = MEDCouplingUMesh("mesh",1)
6973 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6974 m0.setCoords(coords)
6976 m0.insertNextCell(NORM_SEG2,[1,2])
6979 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6980 m1.setCoords(m0.getCoords())
6981 m1.setNodalConnectivity(DataArrayInt([1,2]))
6982 m1.setName(m0.getName())
6984 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6985 mm.zipCoords() # <- This call changes the coords and connectivity
6988 mm = MEDFileMesh.New(fname)
6989 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6990 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6995 if __name__ == "__main__":