1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021 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())
5009 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5011 def testMEDFileSafeCall0(self):
5012 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5013 fname="Pyfile94.med"
5014 errfname="Pyfile94.err"
5017 # first clean file if needed
5018 if os.path.exists(fname):
5021 # second : build a file from scratch
5022 m=MEDCouplingCMesh()
5023 arr=DataArrayDouble(11) ; arr.iota()
5024 m.setCoords(arr,arr)
5029 # third : change permissions to remove write access on created file
5030 os.chmod(fname, 0o444)
5031 # four : try to append data on file -> check that it raises Exception
5032 f=MEDCouplingFieldDouble(ON_CELLS)
5035 f.setArray(DataArrayDouble(100))
5036 f.getArray()[:]=100.
5037 f.checkConsistencyLight()
5038 f1ts=MEDFileField1TS()
5039 f1ts.setFieldNoProfileSBT(f)
5041 tmp=StdOutRedirect(errfname)
5042 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5045 if os.path.exists(errfname):
5051 def testUnivStatus1(self):
5052 """ Non regression test to check the effectiveness of univ write status."""
5053 fname="Pyfile95.med"
5054 arr=DataArrayDouble(10) ; arr.iota()
5055 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5056 mm=MEDFileCMesh() ; mm.setMesh(m)
5057 mm.setUnivNameWrStatus(False) # test is here
5059 mm=MEDFileCMesh(fname)
5060 self.assertEqual(mm.getUnivName(),"")
5061 mm.setUnivNameWrStatus(True)
5063 mm=MEDFileCMesh(fname)
5064 self.assertTrue(mm.getUnivName()!="")
5068 def testEmptyMesh(self):
5069 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5071 fname = "Pyfile96.med"
5072 m = MEDCouplingUMesh('toto', 2)
5073 m.setCoords(DataArrayDouble([], 0, 2))
5074 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5075 mfu = MEDFileUMesh()
5076 mfu.setMeshAtLevel(0, m)
5078 mfu2 = MEDFileUMesh(fname)
5079 self.assertEqual('toto', mfu2.getName())
5080 lvl = mfu2.getNonEmptyLevels()
5081 self.assertEqual((), lvl)
5083 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5084 def testMEDFileUMeshPickeling2(self):
5085 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5091 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5092 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5093 mesh=MEDFileUMesh() ; mesh[0]=m
5094 m1=m.computeSkin() ; mesh[-1]=m1
5096 bary1=m1.computeCellCenterOfMass()[:,2]
5097 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5098 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5099 mesh.setGroupsAtLevel(-1,[grp1,grp2])
5101 st=pickle.dumps(mesh,2)
5103 st2=pickle.dumps(mm,2)
5104 mm2=pickle.loads(st2)
5105 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5109 def testMEDFileEquivalence1(self):
5110 """ First check of equivalence implementation in MEDFileMesh"""
5111 fileName="Pyfile97.med"
5114 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)])
5115 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5116 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])
5117 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5118 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])
5119 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5120 mm.getFamilyFieldAtLevel(-1)[:]=-2
5121 mm.getFamilyFieldAtLevel(0)[:]=0
5122 mm.addFamily("HOMARD________-1",-1)
5123 mm.addFamily("HOMARD________-2",-2)
5124 mm.addFamily("HOMARD________-3",-3)
5125 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5127 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5128 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."
5129 mm.initializeEquivalences()
5130 eqs=mm.getEquivalences()
5131 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5132 eq0.setDescription(descEq)
5133 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)])
5134 eq0.setArray(-1,corr)
5135 self.assertEqual(eq0.getCell().size(),1)
5136 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5137 eq0.getCell().clear()
5138 self.assertEqual(eq0.getCell().size(),0)
5139 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5140 self.assertEqual(eq0.getCell().size(),1)
5141 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5142 mm.killEquivalences()
5143 mm.initializeEquivalences()
5144 eqs=mm.getEquivalences()
5145 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5146 eq0.setDescription(descEq)
5148 c.setArrayForType(NORM_QUAD4,corr)
5149 self.assertEqual(eq0.getCell().size(),1)
5150 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5152 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5153 self.assertEqual(mm2.getEquivalences().size(),1)
5154 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5155 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5156 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5157 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5158 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5159 mm.write(fileName,2)
5161 mm3=MEDFileMesh.New(fileName)
5162 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5166 def testMEDFileForFamiliesPlayer1(self):
5167 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5168 fileName="Pyfile98.med"
5170 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5171 arr=DataArrayDouble(4) ; arr.iota()
5172 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5173 m=m.buildUnstructured()
5176 mm.setName(meshName)
5177 mm.setFamilyId("FAMILLE_ZERO",0)
5178 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5179 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5180 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5181 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5182 mm.setFamilyFieldArr(1,d)
5183 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5184 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5185 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5186 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5187 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5188 mm.write(fileName,2)
5189 # now read such funny file !
5190 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5191 self.assertTrue(mm.isEqual(mm2,1e-16))
5192 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5193 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5194 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5198 def testCartesianizer1(self):
5199 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5201 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5202 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5203 d0=DataArrayInt(16) ; d0[:]=0
5204 d1=DataArrayInt(9) ; d1[:]=0
5205 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5206 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5207 ref0=mm.getCoords().getHiddenCppPointer()
5208 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5209 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5210 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5211 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5212 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5213 mm.setAxisType(AX_CYL) #<- important
5214 mm2=mm.cartesianize() # the trigger
5215 self.assertEqual(mm2.getAxisType(),AX_CART)
5216 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5217 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5218 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5219 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5220 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5221 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5222 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5223 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5224 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5225 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5226 self.assertEqual(mm2.getName(),mm.getName())
5227 self.assertEqual(mm2.getDescription(),mm.getDescription())
5228 self.assertEqual(mm2.getTime(),mm.getTime())
5229 self.assertEqual(mm2.getTime(),mm.getTime())
5230 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5231 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5232 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5233 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5234 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5235 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5236 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5237 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5239 mm.setAxisType(AX_CART)
5240 mm2=mm.cartesianize() # the trigger
5241 self.assertEqual(mm2.getAxisType(),AX_CART)
5242 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5243 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5244 # CurveLinearMesh non cart
5245 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5246 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5247 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5248 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5249 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5250 mm2=mm.cartesianize() # the trigger
5251 self.assertEqual(mm2.getAxisType(),AX_CART)
5252 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5253 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5254 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5255 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5256 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5257 self.assertEqual(mm2.getName(),mm.getName())
5258 self.assertEqual(mm2.getDescription(),mm.getDescription())
5259 self.assertEqual(mm2.getTime(),mm.getTime())
5260 self.assertEqual(mm2.getTime(),mm.getTime())
5261 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5262 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5263 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5264 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5265 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5266 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5267 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5268 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5269 # CurveLinearMesh cart
5270 mm.setAxisType(AX_CART)
5271 mm2=mm.cartesianize() # the trigger
5272 self.assertEqual(mm2.getAxisType(),AX_CART)
5273 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5274 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5276 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5277 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5278 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5279 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5280 mm2=mm.cartesianize() # the trigger
5281 self.assertEqual(mm2.getAxisType(),AX_CART)
5282 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5283 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5284 self.assertEqual(mm2.getName(),mm.getName())
5285 self.assertEqual(mm2.getDescription(),mm.getDescription())
5286 self.assertEqual(mm2.getTime(),mm.getTime())
5287 self.assertEqual(mm2.getTime(),mm.getTime())
5288 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5289 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5290 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5291 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5292 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5293 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5294 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5295 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5297 mm.setAxisType(AX_CART)
5298 mm2=mm.cartesianize() # the trigger
5299 self.assertEqual(mm2.getAxisType(),AX_CART)
5300 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5301 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5305 def testCheckCoherency(self):
5306 m2 = MEDCouplingUMesh("2d", 2)
5307 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5308 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5309 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5310 mum = MEDFileUMesh()
5311 mum.setMeshAtLevel(0, m2)
5312 mum.setMeshAtLevel(-1, m1)
5313 mum.checkConsistency()
5314 mum2 = mum.deepCopy()
5317 arr = DataArrayInt([2]*4)
5318 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5319 self.assertRaises(InterpKernelException, mum.checkConsistency)
5320 mum=mum2; mum2=mum.deepCopy();
5321 arr = DataArrayInt([2]*4)
5322 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5323 self.assertRaises(InterpKernelException, mum.checkConsistency)
5324 mum=mum2; mum2=mum.deepCopy();
5325 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5326 self.assertRaises(InterpKernelException, mum.checkConsistency)
5327 mum=mum2; mum2=mum.deepCopy();
5328 arr = DataArrayAsciiChar(['tutu x']*4)
5329 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5330 self.assertRaises(InterpKernelException, mum.checkConsistency)
5333 mum=mum2; mum2=mum.deepCopy();
5334 arr = DataArrayInt([2]*2)
5335 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5336 self.assertRaises(InterpKernelException, mum.checkConsistency)
5337 mum=mum2; mum2=mum.deepCopy();
5338 arr = DataArrayInt([2]*2)
5339 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5340 self.assertRaises(InterpKernelException, mum.checkConsistency)
5341 mum=mum2; mum2=mum.deepCopy();
5342 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5343 self.assertRaises(InterpKernelException, mum.checkConsistency)
5344 mum=mum2; mum2=mum.deepCopy();
5345 arr = DataArrayAsciiChar(['tutu x']*2)
5346 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5347 self.assertRaises(InterpKernelException, mum.checkConsistency)
5350 mum=mum2; mum2=mum.deepCopy();
5351 arr = DataArrayInt([2]*5)
5352 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5353 self.assertRaises(InterpKernelException, mum.checkConsistency)
5354 mum=mum2; mum2=mum.deepCopy();
5355 arr = DataArrayInt([2]*5)
5356 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5357 self.assertRaises(InterpKernelException, mum.checkConsistency)
5358 mum=mum2; mum2=mum.deepCopy();
5359 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5360 self.assertRaises(InterpKernelException, mum.checkConsistency)
5361 mum=mum2; mum2=mum.deepCopy();
5362 arr = DataArrayAsciiChar(['tutu x']*5)
5363 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5364 self.assertRaises(InterpKernelException, mum.checkConsistency)
5367 def testCheckSMESHConsistency(self):
5368 m2 = MEDCouplingUMesh("2d", 2)
5369 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5370 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5371 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5372 mum = MEDFileUMesh()
5373 mum.setMeshAtLevel(0, m2)
5374 mum.setMeshAtLevel(-1, m1)
5375 mum.checkConsistency()
5376 mum.checkSMESHConsistency()
5377 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5378 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5379 mum.setRenumFieldArr(0, n2)
5380 mum.setRenumFieldArr(-1, n1)
5381 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5382 mum.setRenumFieldArr(-1, n1+100)
5383 mum.checkSMESHConsistency()
5387 def testClearNodeAndCellNumbers(self):
5388 m2 = MEDCouplingUMesh("2d", 2)
5389 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5390 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5391 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5392 mum = MEDFileUMesh()
5393 mum.setMeshAtLevel(0, m2)
5394 mum.setMeshAtLevel(-1, m1)
5395 mum.checkConsistency()
5396 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5397 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5398 mum.setRenumFieldArr(0, n2)
5399 mum.setRenumFieldArr(-1, n1)
5400 mum.clearNodeAndCellNumbers()
5401 mum.checkSMESHConsistency()
5405 def testCMeshSetFamilyFieldArrNull(self):
5407 fname="Pyfile99.med"
5408 arrX=DataArrayDouble([0,1,2,3])
5409 arrY=DataArrayDouble([0,1,2])
5410 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5411 mm=MEDFileCMesh() ; mm.setMesh(m)
5412 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5413 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5414 mm.setFamilyFieldArr(0,famCellIds)
5415 mm.setFamilyFieldArr(1,famNodeIds)
5417 mm=MEDFileMesh.New(fname)
5418 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5419 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5420 mm.setFamilyFieldArr(0,None)#<- bug was here
5421 mm.setFamilyFieldArr(1,None)#<- bug was here
5422 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5423 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5425 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5426 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5428 mm2=MEDFileMesh.New(fname)
5429 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5430 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5434 def testAppendFieldProfileOnIntField(self):
5435 fname="Pyfile100.med"
5436 arrX=DataArrayDouble([0,1,2,3])
5437 arrY=DataArrayDouble([0,1,2])
5438 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5442 fmts=MEDFileIntFieldMultiTS()
5444 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5445 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5446 fieldName="FieldOnCell"
5447 f.setTime(1.2,1,1) ; f.setName(fieldName)
5448 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5449 fmts.appendFieldProfile(f,mm,0,pfl)
5454 mm=MEDFileMesh.New(fname)
5455 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5456 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5457 self.assertEqual(fmts.getName(),fieldName)
5458 self.assertEqual(len(fmts),1)
5460 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5461 self.assertEqual(pfltest.getName(),pflName)
5462 self.assertEqual(ftest.getName(),fieldName)
5463 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5464 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5465 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5466 self.assertEqual(ftest2.getTime(),f.getTime())
5467 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5471 def testMEDFileFieldEasyField1(self):
5472 """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."""
5473 ## Basic test on cells on top level
5474 fname="Pyfile101.med"
5477 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5478 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5480 m.insertNextCell(NORM_TRI3,[0,1,2])
5481 m.insertNextCell(NORM_TRI3,[3,4,5])
5482 m.insertNextCell(NORM_TRI3,[6,7,8])
5483 m.insertNextCell(NORM_TRI3,[9,10,11])
5484 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5485 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5488 arr0=DataArrayDouble([10,11,12,13,100,101])
5489 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5490 f.setName(fieldName) ; f.setTime(2.,6,7)
5492 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5494 arr2=arr0+1000 ; f.setArray(arr2)
5495 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5499 mm=MEDFileMesh.New(fname)
5500 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5501 ftst0=f1ts.field(mm)
5502 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5503 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5504 ftst1=f1ts.field(mm)
5505 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5506 fmts=MEDFileFieldMultiTS(fname,fieldName)
5507 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5508 ## Basic test on nodes on top level
5509 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5510 f2.setName(fieldName)
5512 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5514 mm=MEDFileMesh.New(fname)
5515 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5516 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5517 fmts=MEDFileFieldMultiTS(fname,fieldName)
5518 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5520 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)
5521 f3.setName(fieldName) ; f3.checkConsistencyLight()
5522 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5524 mm=MEDFileMesh.New(fname)
5525 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5526 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5528 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5529 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])
5530 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)
5531 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)
5532 f4.checkConsistencyLight()
5533 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5535 mm=MEDFileMesh.New(fname)
5536 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5537 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5541 def testMEDFileFieldEasyField2(self):
5542 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5543 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."""
5544 ## Basic test on cells on top level
5545 fname="Pyfile102.med"
5548 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5549 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5551 m.insertNextCell(NORM_TRI3,[0,1,2])
5552 m.insertNextCell(NORM_TRI3,[3,4,5])
5553 m.insertNextCell(NORM_TRI3,[6,7,8])
5554 m.insertNextCell(NORM_TRI3,[9,10,11])
5555 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5556 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5559 arr0=DataArrayInt32([10,11,12,13,100,101])
5560 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5561 f.setName(fieldName) ; f.setTime(2.,6,7)
5563 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5565 arr2=arr0+1000 ; f.setArray(arr2)
5566 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5570 mm=MEDFileMesh.New(fname)
5571 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5572 ftst0=f1ts.field(mm)
5573 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5574 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5575 ftst1=f1ts.field(mm)
5576 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5577 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5578 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5579 ## Basic test on nodes on top level
5580 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5581 f2.setName(fieldName)
5583 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5585 mm=MEDFileMesh.New(fname)
5586 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5587 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5588 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5589 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5591 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)
5592 f3.setName(fieldName) ; f3.checkConsistencyLight()
5593 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5595 mm=MEDFileMesh.New(fname)
5596 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5597 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5599 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5600 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])
5601 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)
5602 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)
5603 f4.checkConsistencyLight()
5604 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5606 mm=MEDFileMesh.New(fname)
5607 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5608 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5612 def testMEDFileFieldEasyField3(self):
5613 """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."""
5614 fname="Pyfile103.med"
5617 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5618 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5620 m.insertNextCell(NORM_TRI3,[0,1,2])
5621 m.insertNextCell(NORM_TRI3,[3,4,5])
5622 m.insertNextCell(NORM_TRI3,[6,7,8])
5623 m.insertNextCell(NORM_TRI3,[9,10,11])
5624 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5625 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5627 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5629 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5630 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5634 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5635 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5637 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5638 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5639 # here f1 lying on level -1 not 0 check if "field" method detect it !
5640 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5641 f1.setMesh(mm[-1]) # -1 is very important
5643 f1.checkConsistencyLight()
5645 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5647 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5648 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5650 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5651 f3.setMesh(mm[-1]) # this line is important
5652 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)
5653 f3.setName(fieldName) ; f3.checkConsistencyLight()
5654 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5656 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5657 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5659 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5660 f4.setMesh(mm[-1]) # this line is important
5661 f4.setName(fieldName)
5662 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])
5663 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)
5664 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)
5665 f4.checkConsistencyLight()
5666 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5667 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5668 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5672 def testMEDFileFieldEasyField4(self):
5673 """ Same than testMEDFileFieldEasyField3 but with integers"""
5674 fname="Pyfile104.med"
5677 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5678 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5680 m.insertNextCell(NORM_TRI3,[0,1,2])
5681 m.insertNextCell(NORM_TRI3,[3,4,5])
5682 m.insertNextCell(NORM_TRI3,[6,7,8])
5683 m.insertNextCell(NORM_TRI3,[9,10,11])
5684 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5685 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5687 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5689 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5690 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5694 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5695 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5697 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5698 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5699 # here f1 lying on level -1 not 0 check if "field" method detect it !
5700 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5701 f1.setMesh(mm[-1]) # -1 is very important
5703 f1.checkConsistencyLight()
5705 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5707 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5708 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5710 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5711 f3.setMesh(mm[-1]) # this line is important
5712 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)
5713 f3.setName(fieldName) ; f3.checkConsistencyLight()
5714 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5716 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5717 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5719 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5720 f4.setMesh(mm[-1]) # this line is important
5721 f4.setName(fieldName)
5722 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])
5723 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)
5724 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)
5725 f4.checkConsistencyLight()
5726 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5727 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5728 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5732 def testMEDFileFieldEasyField5(self):
5733 """More and more difficult now look at how profiles are managed by "field" method."""
5734 fname="Pyfile105.med"
5737 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5738 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5740 m.insertNextCell(NORM_TRI3,[0,1,2])
5741 m.insertNextCell(NORM_TRI3,[3,4,5])
5742 m.insertNextCell(NORM_TRI3,[6,7,8])
5743 m.insertNextCell(NORM_TRI3,[9,10,11])
5744 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5745 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5748 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5749 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5751 arr0=DataArrayDouble([10,11,12,13])
5752 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5753 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5754 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5757 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5758 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5759 # more complicated -> multi level
5760 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5762 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5763 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5765 mm2[0]=m0 ; mm2[-1]=m
5767 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5769 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5770 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5774 def testExtractPart1(self):
5775 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)])
5777 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5778 m0.insertNextCell(NORM_TRI3,[8,4,3])
5779 m0.insertNextCell(NORM_TRI3,[8,9,4])
5780 m0.insertNextCell(NORM_TRI3,[7,13,8])
5781 m0.insertNextCell(NORM_TRI3,[7,12,13])
5782 m0.insertNextCell(NORM_TRI3,[0,6,1])
5783 m0.insertNextCell(NORM_TRI3,[0,5,6])
5784 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5785 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5786 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5787 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5788 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5790 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5791 m1.insertNextCell(NORM_SEG2,[10,5])
5792 m1.insertNextCell(NORM_SEG2,[5,0])
5793 m1.insertNextCell(NORM_SEG2,[0,1])
5794 m1.insertNextCell(NORM_SEG2,[1,2])
5795 m1.insertNextCell(NORM_SEG2,[2,3])
5796 m1.insertNextCell(NORM_SEG2,[3,4])
5797 m1.insertNextCell(NORM_SEG2,[4,9])
5798 m1.insertNextCell(NORM_SEG2,[9,14])
5799 m1.insertNextCell(NORM_SEG2,[14,13])
5800 m1.insertNextCell(NORM_SEG2,[13,12])
5801 m1.insertNextCell(NORM_SEG2,[12,11])
5802 m1.insertNextCell(NORM_SEG2,[11,10])
5804 mm[0]=m0 ; mm[-1]=m1
5805 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5807 tab[0]=DataArrayInt([0,2,3,4,6,7])
5808 tab[-1]=DataArrayInt([2,3,4,5,9])
5810 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5814 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5817 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5818 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5819 f0.setMesh(m0) ; f0.setName(fname0)
5820 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5821 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5822 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]))
5823 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5824 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5825 fmts.pushBackTimeStep(f1ts)
5827 mmOut=mm.extractPart(tab)
5829 fsPart0=fs.extractPart(tab,mm)
5830 self.assertEqual(len(fsPart0),1)
5832 self.assertEqual(len(fmtsP),1)
5834 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5836 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5837 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5839 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5840 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5841 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5842 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5843 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5845 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5846 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5847 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5848 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5849 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5850 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5851 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5852 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5853 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5854 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5856 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5857 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5858 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5860 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5861 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5862 for i,tt in enumerate(tss):
5863 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5864 myarr=arr0_0+i*1000.
5866 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5867 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5869 fsPart1=fs.extractPart(tab,mm)
5870 self.assertEqual(len(fsPart1),1)
5872 self.assertEqual(len(fmtsP),len(tss))
5873 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5874 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5875 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5876 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5877 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5878 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5879 self.assertEqual(fPart.getTime(),list(tt))
5884 def testSymmetryPlusAggregationMFD1(self):
5885 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5886 fname1="Pyfile106_1.med"
5887 fname2="Pyfile106_2.med"
5888 fname3="Pyfile106_3.med"
5891 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5893 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5894 mm1_0.setCoords(da1)
5895 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5896 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5897 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5898 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5899 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5901 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5902 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5904 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5905 mm1_1.setCoords(da1)
5906 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5907 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5908 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5909 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5910 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5911 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5913 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5914 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5915 for i in range(1,10):
5916 mm1.setFamilyId("F%d"%i,i)
5917 mm1.setFamilyId("FAMILLE_ZERO",0)
5918 mm1.setFamilyId("H1",100)
5919 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5920 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5921 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5922 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5925 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]"])
5927 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5928 mm2_0.setCoords(da1)
5929 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5930 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5931 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5932 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5934 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5935 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5937 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5938 mm2_1.setCoords(da1)
5939 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5940 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5941 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5942 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5943 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5944 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5945 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5946 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5948 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5949 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5950 for i in range(1,12):
5951 mm2.setFamilyId("G%d"%i,i+30)
5952 mm2.setFamilyId("H1",100)
5953 mm2.setFamilyId("FAMILLE_ZERO",0)
5954 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5955 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5956 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5957 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5959 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5961 def CheckMesh(tester,mm):
5962 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]"])
5963 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5964 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])))
5965 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5966 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])))
5967 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5968 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5969 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5970 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5971 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5972 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)]
5973 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5974 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5975 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5976 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5983 infoc=["dd [W]","eee [kA]"]
5985 fmts1=MEDFileFieldMultiTS()
5986 f1ts1=MEDFileField1TS()
5987 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5988 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5989 arr1.setInfoOnComponents(infoc)
5990 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5991 f1_1.checkConsistencyLight()
5992 f1ts1.setFieldNoProfileSBT(f1_1)
5994 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5995 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5996 arr2.setInfoOnComponents(infoc)
5997 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5998 f1_2.checkConsistencyLight()
5999 f1ts1.setFieldNoProfileSBT(f1_2)
6000 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6001 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6002 arr3.setInfoOnComponents(infoc)
6003 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6004 f1_3.checkConsistencyLight()
6005 f1ts1.setFieldNoProfileSBT(f1_3)
6006 fmts1.pushBackTimeStep(f1ts1)
6008 f1ts2=f1ts1.deepCopy()
6009 f1ts2.setTime(t2[1],t2[2],t2[0])
6010 f1ts2.getUndergroundDataArray()[:]+=2000
6011 fmts1.pushBackTimeStep(f1ts2)
6013 fmts2=MEDFileFieldMultiTS()
6014 f1ts3=MEDFileField1TS()
6015 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6016 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6017 arr4.setInfoOnComponents(infoc)
6018 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6019 f2_1.checkConsistencyLight()
6020 f1ts3.setFieldNoProfileSBT(f2_1)
6021 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6022 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6023 arr5.setInfoOnComponents(infoc)
6024 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6025 f2_2.checkConsistencyLight()
6026 f1ts3.setFieldNoProfileSBT(f2_2)
6027 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6028 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6029 arr6.setInfoOnComponents(infoc)
6030 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6031 f2_3.checkConsistencyLight()
6032 f1ts3.setFieldNoProfileSBT(f2_3)
6033 fmts2.pushBackTimeStep(f1ts3)
6035 f1ts4=f1ts3.deepCopy()
6036 f1ts4.setTime(t2[1],t2[2],t2[0])
6037 f1ts4.getUndergroundDataArray()[:]+=2000
6038 fmts2.pushBackTimeStep(f1ts4)
6041 mfd1.setMeshes(MEDFileMeshes())
6042 mfd1.getMeshes().pushMesh(mm1)
6043 mfd1.setFields(MEDFileFields())
6044 mfd1.getFields().pushField(fmts1)
6047 mfd2.setMeshes(MEDFileMeshes())
6048 mfd2.getMeshes().pushMesh(mm2)
6049 mfd2.setFields(MEDFileFields())
6050 mfd2.getFields().pushField(fmts2)
6052 mfd=MEDFileData.Aggregate([mfd1,mfd2])
6053 def CheckMFD(tester,mfd):
6054 tester.assertEqual(len(mfd.getMeshes()),1)
6055 tester.assertEqual(len(mfd.getFields()),1)
6056 CheckMesh(self,mfd.getMeshes()[0])
6057 tester.assertEqual(len(mfd.getFields()[0]),2)
6058 zeF1=mfd.getFields()[0][0]
6059 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6060 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6061 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6062 ref.renumberCells(o2n)
6063 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6064 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6065 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6066 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6067 ref.renumberCells(o2n)
6068 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6069 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6070 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6071 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6072 ref.renumberCells(o2n)
6073 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6075 zeF2=mfd.getFields()[0][1]
6076 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6077 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6078 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6079 ref.renumberCells(o2n)
6080 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6081 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6082 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6083 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6084 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6085 ref.renumberCells(o2n)
6086 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6087 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6088 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6089 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6090 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6091 ref.renumberCells(o2n)
6092 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6093 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6095 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6096 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6101 def testAggregateWithGroups(self):
6102 """ Testing MEDFileUMesh::Aggretate when groups are present. """
6103 def generate(grp_name, offset):
6104 coo = DataArrayDouble([0., 1., 2.])
6106 m = MEDCouplingCMesh("toto")
6107 m.setCoords(coo, coo)
6108 m = m.buildUnstructured()
6109 mu = MEDFileUMesh.New()
6110 mu.setMeshAtLevel(0, m)
6111 g = DataArrayInt([0])
6113 g2 = DataArrayInt([1])
6114 g2.setName("common") # make a common group for all meshes being merged
6115 mu.setGroupsAtLevel(0, [g, g2])
6118 m1 = generate("A", 0.)
6119 m2 = generate("B", 2.)
6120 mm = MEDFileUMesh.Aggregate([m1,m2])
6122 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6123 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6124 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6125 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6126 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6127 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6128 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6129 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6130 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6135 def testExtrudedMesh1(self):
6136 fname="Pyfile107.med"
6137 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6138 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6139 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6142 ex2=mm.convertToExtrudedMesh()
6143 mm2=MEDFileMesh.New(fname)
6144 ex3=mm2.convertToExtrudedMesh()
6145 self.assertTrue(ex.isEqual(ex2,1e-12))
6146 self.assertTrue(ex.isEqual(ex3,1e-12))
6149 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6151 def testWriteInto30(self):
6152 fname="Pyfile108.med"
6153 fname2="Pyfile109.med"
6154 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6155 mm=MEDFileUMesh() ; mm[0]=m
6156 mm.setFamilyId("FAMILLE_ZERO",0)
6159 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6160 mm2=MEDFileUMesh(fname)
6161 self.assertTrue(mm.isEqual(mm2,1e-12))
6164 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
6167 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6169 def testPickelizationOfMEDFileObjects1(self):
6170 fname="Pyfile110.med"
6171 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)
6172 m0=MEDCouplingUMesh("Mesh",2)
6174 m0.insertNextCell(NORM_TRI3,[1,4,2])
6175 m0.insertNextCell(NORM_TRI3,[4,5,2])
6176 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6177 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6178 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6179 m0.finishInsertingCells()
6181 m1=MEDCouplingUMesh(m0.getName(),1)
6183 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6185 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6187 m1.finishInsertingCells()
6191 m.setMeshAtLevel(0,m0)
6192 m.setMeshAtLevel(-1,m1)
6194 dt=3 ; it=2 ; tim=4.5
6195 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6196 fieldNode0.setName("fieldNode0")
6197 fieldNode0.setTime(tim,dt,it)
6198 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6199 arr=DataArrayDouble([10,11,12,13,14])
6200 fieldNode0.setArray(arr)
6201 f0=MEDFileField1TS()
6202 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6203 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6204 fieldNode1.setName("fieldNode1")
6205 fieldNode1.setTime(tim,dt,it)
6206 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6207 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6208 fieldNode1.setArray(arr1)
6209 f1=MEDFileField1TS()
6210 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6212 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6213 mfd.getMeshes().pushMesh(m)
6214 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6215 mfd.getFields().pushField(fmts)
6216 # first start gently
6219 self.assertEqual(len(mfd2.getMeshes()),1)
6220 self.assertEqual(len(mfd2.getFields()),1)
6221 self.assertEqual(len(mfd2.getFields()[0]),1)
6222 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6223 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6224 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6225 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6226 # OK now end of joke -> serialization of MEDFileData
6227 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6228 mfd3=pickle.loads(st)
6230 self.assertEqual(len(mfd3.getMeshes()),1)
6231 self.assertEqual(len(mfd3.getFields()),1)
6232 self.assertEqual(len(mfd3.getFields()[0]),1)
6233 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6234 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6235 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6236 # serialization of MEDFileFields
6237 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6238 fs4=pickle.loads(st)
6239 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6240 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6241 # serialization of MEDFileFieldMulitTS
6242 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6243 fmts5=pickle.loads(st)
6244 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6245 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6246 # serialization of MEDFileField1TS
6247 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6248 f1ts6=pickle.loads(st)
6249 ff6=f1ts6.field(mfd3.getMeshes()[0])
6250 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6251 # serialization of MEDFileMeshes
6252 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6253 ms7=pickle.loads(st)
6254 self.assertEqual(len(ms7),1)
6255 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6258 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6260 def testPickelizationOfMEDFileObjects2(self):
6262 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6263 mm=MEDFileMesh.New("MEDFileMesh5.med")
6264 self.assertTrue(isinstance(mm,MEDFileCMesh))
6265 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6266 mm2=pickle.loads(st)
6267 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6268 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6270 self.internalCurveLinearMesh1() # generates Pyfile55.med
6271 mm=MEDFileMesh.New("Pyfile55.med")
6272 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6273 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6274 mm3=pickle.loads(st)
6275 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6276 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6277 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6278 # MEDFileIntFieldMultiTS
6279 fs4=MEDFileFields("Pyfile63.med")
6280 ms4=MEDFileMeshes("Pyfile63.med")
6281 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6282 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6283 fmts5=pickle.loads(st)
6284 self.assertEqual(len(fs4[0]),len(fmts5))
6285 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6286 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6287 # MEDFileIntField1TS
6288 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6289 f1ts6=pickle.loads(st)
6290 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6291 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6293 self.internalParameters1()# generates Pyfile56.med
6294 params=MEDFileParameters("Pyfile56.med")
6295 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6296 params7=pickle.loads(st)
6297 self.assertEqual(len(params),len(params7))
6298 for i in range(len(params)):
6299 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6304 def testGlobalNumOnNodes1(self):
6305 """Test global number on nodes here. Used by partitionners."""
6306 fname="Pyfile112.med"
6307 arr=DataArrayDouble(5) ; arr.iota()
6308 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6312 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6313 d=DataArrayInt([7,8,9,2,0])
6315 mm.setGlobalNumFieldAtLevel(1,d)
6316 mm.checkConsistency()
6317 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6318 mm.checkConsistency()
6319 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6320 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6322 mm2=MEDFileMesh.New(fname)
6323 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6324 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6325 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6326 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6327 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6328 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6332 def testPartialReadOfEntities1(self):
6333 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6334 fname="Pyfile113.med"
6335 arr=DataArrayDouble(5) ; arr.iota()
6336 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6343 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6344 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6346 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6347 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6349 f1ts=MEDFileField1TS()
6350 f1ts.setFieldNoProfileSBT(f1)
6351 f1ts.setFieldNoProfileSBT(f2)
6352 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6353 f1ts_2=f1ts.deepCopy()
6354 f1ts_2.getUndergroundDataArray()[:]+=2
6355 f1ts_2.setTime(3,4,6.)
6356 fmts=MEDFileFieldMultiTS()
6357 fmts.pushBackTimeStep(f1ts)
6358 fmts.pushBackTimeStep(f1ts_2)
6363 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6364 mm=MEDFileMesh.New(fname)
6365 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)
6367 self.assertEqual(len(fs),1)
6369 self.assertEqual(len(fmts),2)
6370 ff0=fmts[0] ; ff1=fmts[1]
6371 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6372 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6373 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6374 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6378 def testFloat32InMEDFileFieldStar1(self):
6379 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6380 fname="Pyfile114.med"
6381 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6382 f1=f1.convertToFloatField()
6384 mm1=MEDFileUMesh.New()
6385 mm1.setCoords(m1.getCoords())
6386 mm1.setMeshAtLevel(0,m1)
6387 mm1.setName(m1.getName())
6389 ff1=MEDFileFloatField1TS()
6390 ff1.setFieldNoProfileSBT(f1)
6391 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6392 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6393 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6395 a,b=ff1.getUndergroundDataArrayExt()
6396 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6397 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6398 ff2=MEDFileAnyTypeField1TS.New(fname)
6399 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6400 self.assertEqual(ff2.getTime(),[0,1,2.0])
6401 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6402 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6403 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6404 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6406 c=ff2.getUndergroundDataArray() ; c*=2
6407 ff2.write(fname,0) # 2 time steps in
6408 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6409 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6410 self.assertEqual(len(ffs1),2)
6411 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6412 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6413 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6414 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6415 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6416 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6417 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6418 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6419 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6420 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6421 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6423 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6426 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6427 nf1=MEDCouplingFieldFloat(ON_NODES)
6428 nf1.setTime(9.,10,-1)
6429 nf1.setMesh(f1.getMesh())
6430 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6431 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6432 nff1=MEDFileFloatField1TS.New()
6433 nff1.setFieldNoProfileSBT(nf1)
6434 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6435 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6438 nf2=MEDCouplingFieldFloat(ON_NODES)
6439 nf2.setTime(19.,20,-11)
6440 nf2.setMesh(f1.getMesh())
6441 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6442 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6443 nff2=MEDFileFloatField1TS.New()
6444 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6445 nff2.setFieldProfile(nf2,mm1,0,npfl)
6446 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6447 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6448 self.assertTrue(b.isEqual(npfl))
6449 self.assertTrue(a.isEqual(narr2,1e-7))
6451 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6452 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6453 self.assertTrue(b.isEqual(npfl))
6454 self.assertTrue(a.isEqual(narr2,1e-7))
6456 nf3=MEDCouplingFieldDouble(ON_NODES)
6457 nf3.setName("VectorFieldOnNodesDouble")
6458 nf3.setTime(29.,30,-21)
6459 nf3.setMesh(f1.getMesh())
6460 nf3.setArray(f1.getMesh().getCoords())
6461 nff3=MEDFileField1TS.New()
6462 nff3.setFieldNoProfileSBT(nf3)
6464 fs=MEDFileFields(fname)
6465 self.assertEqual(len(fs),4)
6466 ffs=[it for it in fs]
6467 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6468 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6469 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6470 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6472 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6473 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6474 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6475 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6476 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6478 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6479 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6480 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6481 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6482 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6483 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6484 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6485 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6487 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6488 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6489 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6490 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6494 def testPenta18_1(self):
6495 """EDF8478 : Test of read/write of penta18"""
6496 fname="Pyfile115.med"
6497 arr=DataArrayDouble([
6498 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6499 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6500 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6501 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6502 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6503 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6504 m=MEDCouplingUMesh("mesh",3)
6507 m.insertNextCell(NORM_PENTA18,list(range(18)))
6508 m.checkConsistencyLight()
6510 f=MEDCouplingFieldDouble(ON_NODES)
6512 f.setName("FieldOnPenta18")
6513 f.setArray(DataArrayDouble(list(range(18))))
6514 f.checkConsistencyLight()
6516 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6518 f2=MEDCouplingFieldDouble(ON_NODES)
6520 f2.setName("FieldOnPenta18Sub")
6521 f2.setArray(DataArrayDouble(list(range(18))))
6522 f2.checkConsistencyLight()
6523 WriteField(fname,f2,True)
6525 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6526 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6527 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6531 def testFieldsLinearToQuadratic(self):
6532 fname="Pyfile117.med"
6533 arr=DataArrayDouble([0,1])
6534 m=MEDCouplingCMesh();
6535 m.setCoords(arr,arr,arr)
6536 m=m.buildUnstructured()
6538 m2.translate([2,0,0])
6539 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6543 mmq=mm.linearToQuadratic(0)
6544 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6545 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6547 f=MEDCouplingFieldDouble(ON_NODES)
6551 arr=DataArrayDouble(m3.getNumberOfNodes())
6554 f1ts=MEDFileField1TS()
6555 f1ts.setFieldNoProfileSBT(f)
6556 fmts=MEDFileFieldMultiTS()
6557 fmts.pushBackTimeStep(f1ts)
6558 f1ts_2=f1ts.deepCopy()
6559 f1ts_2.setTime(3,4,5.)
6560 f1ts_2.getUndergroundDataArray()[:]*=2.
6561 fmts.pushBackTimeStep(f1ts_2)
6564 fs2=fs.linearToQuadratic(mms,mmsq)
6565 self.myTester1(fs2,mmsq[0])
6566 # A small Write/Read and test again
6567 mms.write(fname,2) ; fs.write(fname,0)
6568 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6569 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6570 fs2=fs.linearToQuadratic(mms,mmqs)
6571 self.myTester1(fs2,mmqs[0])
6574 def myTester1(self,fs2,mmq):
6575 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)
6576 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])
6577 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])
6578 fToTest=fs2[0][0].field(mmq)
6579 self.assertEqual(fToTest.getTime(),[3.,1,2])
6580 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6581 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6582 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6583 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6584 # testing 2nd timestep
6585 fToTest=fs2[0][1].field(mmq)
6586 self.assertEqual(fToTest.getTime(),[5.,3,4])
6587 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6588 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6589 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6590 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6594 def testFieldsLinearToQuadratic2(self):
6595 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6596 GeneratePyfile18(self)
6597 fname="Pyfile118.med"
6598 arr=DataArrayDouble([0,1])
6599 m=MEDCouplingCMesh();
6600 m.setCoords(arr,arr,arr)
6601 m=m.buildUnstructured()
6603 m2.translate([2,0,0])
6604 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6606 # add a point for fun
6607 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6611 mmq=mm.linearToQuadratic(0)
6612 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6613 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6615 f=MEDCouplingFieldDouble(ON_NODES)
6619 arr=DataArrayDouble(8) ; arr.iota()
6622 f1ts=MEDFileField1TS()
6623 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6624 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6625 f1ts_2=f1ts.deepCopy()
6626 f1ts_2.setTime(3,4,5.)
6627 f1ts_2.getUndergroundDataArray()[:]*=4.
6628 fmts=MEDFileFieldMultiTS()
6629 fmts.pushBackTimeStep(f1ts)
6630 fmts.pushBackTimeStep(f1ts_2)
6633 fs2=fs.linearToQuadratic(mms,mmsq)
6634 mms.write(fname,2) ; fs.write(fname,0)
6636 self.myTester2(fs2,mmq)
6638 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6639 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6640 fs2=fs.linearToQuadratic(mms,mmqs)
6641 self.myTester2(fs2,mmq)
6642 ## More vicious add single node 16
6645 mmq=mm.linearToQuadratic(0)
6646 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6647 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6649 f=MEDCouplingFieldDouble(ON_NODES)
6653 arr=DataArrayDouble(9) ; arr.iota()
6656 f1ts=MEDFileField1TS()
6657 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6658 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6659 fmts=MEDFileFieldMultiTS()
6660 fmts.pushBackTimeStep(f1ts)
6663 fs2=fs.linearToQuadratic(mms,mmsq)
6665 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")
6666 f1tsToTest=fs2[0][0]
6667 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])
6668 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6669 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6670 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6673 def myTester2(self,fs2,mmq):
6674 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")
6675 f1tsToTest=fs2[0][0]
6676 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])
6677 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6678 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6679 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6680 fToTest=fs2[0][0].field(mmq)
6681 self.assertEqual(fToTest.getTime(),[3.,1,2])
6682 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6683 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])))
6684 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))
6685 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6687 f1tsToTest=fs2[0][1]
6688 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6689 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6690 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6691 fToTest=fs2[0][1].field(mmq)
6692 self.assertEqual(fToTest.getTime(),[5.,3,4])
6693 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6694 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])))
6695 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))
6696 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6701 def testSetFieldProfileFlatly1(self):
6702 """ 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
6704 arr=DataArrayDouble(10) ; arr.iota()
6705 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6706 m=m.buildUnstructured()
6709 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6713 f=MEDCouplingFieldDouble(ON_CELLS)
6715 arr=DataArrayDouble(m.getNumberOfCells())
6719 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6721 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6722 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6724 f1ts=MEDFileField1TS()
6725 f1ts.setFieldProfile(f,mm,0,pfl)
6726 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6727 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6728 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6730 f1ts=MEDFileField1TS()
6731 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6732 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6733 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6734 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6735 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6736 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6740 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6741 """ Here multi level groups are created"""
6742 arr=DataArrayDouble(11) ; arr.iota()
6743 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6744 m=m.buildUnstructured()
6746 m1=m.buildDescendingConnectivity()[0]
6751 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6752 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6753 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6754 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6755 ################ ajouter un groupe sur plusieurs niveau
6757 mm.addGroup(-1,grp2)
6758 mm.addGroup(0,grp0_0)
6759 mm.addGroup(-1,grp0_1)
6760 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6761 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6762 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6763 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6764 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6765 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6766 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6767 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6768 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6769 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6770 mm.removeGroupAtLevel(0,grpName)
6771 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6772 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6773 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6774 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6775 mm.removeGroupAtLevel(-1,grpName)
6776 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6777 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6778 mm.addGroup(-1,grp0_1)
6779 mm.addGroup(0,grp0_0)
6780 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6781 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6782 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6783 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6784 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6788 def testYutaka(self):
6789 """ 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...
6790 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6792 m=MEDCouplingCMesh()
6793 arr=DataArrayDouble(4) ; arr.iota()
6794 m.setCoords(arr,arr,arr)
6795 m=m.buildUnstructured()
6798 m=m.buildUnstructured()
6799 m1=m.buildDescendingConnectivity()[0]
6805 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6807 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6809 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6811 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6812 mm.addGroup(-1,grp3)
6813 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6814 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6815 mm.addNodeGroup(grp4)
6816 mm.rearrangeFamilies()
6817 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6818 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6819 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6820 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6821 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6823 for grp in [grp0,grp1,grp2,grp3,grp4]:
6824 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6829 def testContxtMger1TS(self):
6830 fname="Pyfile119.med"
6831 coo=DataArrayDouble(1000) ; coo.iota()
6832 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6834 WriteMesh(fname,m,True)
6835 f=MEDCouplingFieldDouble(ON_CELLS)
6838 arr=DataArrayDouble(m.getNumberOfCells())
6840 f.checkConsistencyLight()
6843 f.setTime(float(i),i,0)
6844 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6847 mm=MEDFileMesh.New(fname)
6848 fmts=MEDFileFieldMultiTS(fname,False)
6849 refSize=fmts.getHeapMemorySize()
6855 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6858 def testZipFamilies1(self):
6860 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6863 arr=DataArrayDouble(10) ; arr.iota()
6864 m=MEDCouplingCMesh()
6865 m.setCoords(arr,arr)
6866 m=m.buildUnstructured()
6871 for i in range(m.getNumberOfCells()):
6872 d = DataArrayInt([i])
6873 d.setName("grp%d"%i)
6877 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6878 grp_all.setName("grp_all")
6879 mm.addGroup(0,grp_all)
6880 for i in range(m.getNumberOfCells()):
6881 mm.removeGroup("grp{}".format(i))
6884 mm.zipFamilies() # the method to test
6886 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6887 self.assertEqual(len(mm.getFamiliesNames()),1)
6888 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6891 def testZipFamilies2(self):
6893 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6896 arr=DataArrayDouble(21) ; arr.iota()
6897 m=MEDCouplingCMesh()
6899 m=m.buildUnstructured()
6904 # 1 and 3 to be merged
6905 # 2 and 5 to be merged
6906 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6907 for i in range(1,9):
6908 mm.setFamilyId("Fam_{}".format(i),-i)
6909 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6910 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6911 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6913 grp0=DataArrayInt([0,1,3,8,10,19])
6914 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6915 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6916 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6917 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6918 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6919 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6921 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
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.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6928 def testMeshConvertFromMEDFileGeoType(self):
6929 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6932 def testFieldInt64_0(self):
6934 Small basic test with I/O of field in int64.
6936 fname="Pyfile120.med"
6937 arr = DataArrayDouble([0,1])
6938 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6939 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6940 v = 1234567890123456
6941 f.setArray(DataArrayInt64([v]))
6945 f1ts = MEDFileInt64Field1TS()
6946 f1ts.setFieldNoProfileSBT(f)
6947 fmts = MEDFileInt64FieldMultiTS()
6948 fmts.pushBackTimeStep(f1ts)
6949 fs = MEDFileFields()
6954 mm = MEDFileMesh.New(fname)
6955 fs = MEDFileFields(fname)
6956 f = fs[0][0].field(mm)
6957 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6958 self.assertEqual( f.getArray().getIJ(0,0) , v )
6961 def testNonRegUMeshSubParts(self):
6963 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6965 fname = "Pyfile121.med"
6966 m0 = MEDCouplingUMesh("mesh",1)
6967 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6968 m0.setCoords(coords)
6970 m0.insertNextCell(NORM_SEG2,[1,2])
6973 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6974 m1.setCoords(m0.getCoords())
6975 m1.setNodalConnectivity(DataArrayInt([1,2]))
6976 m1.setName(m0.getName())
6978 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6979 mm.zipCoords() # <- This call changes the coords and connectivity
6982 mm = MEDFileMesh.New(fname)
6983 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6984 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6989 if __name__ == "__main__":