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 # mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1512 ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1513 ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1514 self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1515 self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1516 self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1517 mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1518 m_bis0 = mfu.getMeshAtLevel(-1)
1519 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1520 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1523 def testBuildInnerBoundary5(self):
1524 """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1525 of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1526 coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1527 200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1528 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1529 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1530 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1531 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1532 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1533 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1534 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1535 97.16750463405486, 97.18018457127863], 46, 3)
1536 c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1537 39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1538 21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1539 14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1540 17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1541 24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1542 44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1543 44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1544 29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1545 21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1547 cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1548 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1549 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1550 m3 = MEDCouplingUMesh("3D", 3)
1552 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1553 m3.checkConsistency()
1554 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1555 grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1556 mfu = MEDFileUMesh()
1557 mfu.setMeshAtLevel(0, m3)
1558 mfu.setMeshAtLevel(-1, m2)
1559 grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1560 mfu.setGroupsAtLevel(0, [grpIds3D]) # just to check preservation of 3D group
1561 mfu.setGroupsAtLevel(-1, [grpIds])
1562 nNod = m3.getNumberOfNodes()
1563 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1564 m3_bis = mfu.getMeshAtLevel(0)
1565 m3_bis.checkConsistency()
1566 m2_bis = mfu.getMeshAtLevel(-1)
1567 m2_bis.checkConsistency()
1568 self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1569 self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1570 self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1571 self.assertEqual([3], nodesDup.getValues())
1572 self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1573 self.assertEqual(set([22]), set(cells1.getValues()))
1574 self.assertEqual(set([77]), set(cells2.getValues()))
1575 self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1576 self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1577 self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1578 m_bis0 = mfu.getMeshAtLevel(-1)
1579 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1580 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1584 def testBuildInnerBoundary6(self):
1585 """ 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)
1586 The singular point was wrongly duplicated.
1588 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),
1589 (-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),
1590 (-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),
1591 (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),
1592 (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),
1593 (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),
1594 (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)])
1595 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,
1596 18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1597 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]
1598 cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1599 m3 = MEDCouplingUMesh("3D", 3)
1601 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1602 m3.checkConsistency()
1603 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1604 grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1605 mfu = MEDFileUMesh()
1606 mfu.setMeshAtLevel(0, m3)
1607 mfu.setMeshAtLevel(-1, m2)
1608 mfu.setGroupsAtLevel(-1, [grpIds])
1609 nNod = m3.getNumberOfNodes()
1610 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1611 m3_bis = mfu.getMeshAtLevel(0)
1612 m3_bis.checkConsistency()
1613 m2_bis = mfu.getMeshAtLevel(-1)
1614 m2_bis.checkConsistency()
1615 self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1616 self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1617 self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1618 self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1619 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1620 self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1621 self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1622 self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1623 self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1624 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1625 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1629 def testBasicConstructors(self):
1630 GeneratePyfile18(self)
1631 fname="Pyfile18.med"
1632 TestWriteUMeshesRW1(self)
1633 m=MEDFileMesh.New(fname)
1634 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1635 m=MEDFileMesh.New(fname)
1636 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1637 m=MEDFileUMesh(fname)
1639 self.internalMEDMesh6()
1640 m=MEDFileCMesh("MEDFileMesh5.med")
1641 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1643 m=MEDFileMeshMultiTS()
1644 m=MEDFileMeshMultiTS(fname)
1645 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1647 m=MEDFileMeshes(fname)
1649 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1650 m=MEDFileFieldMultiTS()
1651 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1653 m=MEDFileFields(fname)
1655 m=MEDFileData(fname)
1657 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1658 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1659 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1660 m=MEDCouplingCMesh()
1661 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1662 m=MEDCouplingFieldTemplate(ON_NODES)
1663 m=MEDCouplingMultiFields([])
1664 m=MEDCouplingFieldOverTime([])
1667 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1669 def testBugSemiPartialField(self):
1670 fname="Pyfile46.med"
1671 m=MEDLoaderDataForTest.build2DMesh_3()
1672 m=m[:10] ; m.setName("mesh")
1673 f=m.getMeasureField(False)
1674 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1676 f.setName("SemiPartialField")
1678 f1=f[:6] ; f1.getMesh().setName(m.getName())
1679 f2=f[6:] ; f2.getMesh().setName(m.getName())
1681 mm=MEDFileUMesh.New()
1682 mm.setMeshAtLevel(0,m)
1683 ff=MEDFileField1TS.New()
1684 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1688 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1689 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1690 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1692 fread.checkConsistencyLight()
1693 fread2.checkConsistencyLight()
1694 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1695 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1699 def testUnPolyze1(self):
1700 fname="Pyfile47.med"
1701 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1702 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]
1703 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1704 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]]))
1706 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1707 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1708 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1709 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1710 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1711 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1712 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1713 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1715 mm.setRenumFieldArr(0,None)
1716 mm.setFamilyFieldArr(-1,None)
1720 def testUnPolyze2(self):
1721 fname="Pyfile48.med"
1722 mfd=MEDFileData.New()
1723 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1724 meshes=MEDFileMeshes.New()
1726 mfd.setMeshes(meshes)
1727 fields=MEDFileFields.New()
1728 mfd.setFields(fields)
1729 ff=MEDFileFieldMultiTS.New()
1730 fields.pushField(ff)
1732 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1733 f0_0.setTime(9.5,3,4)
1734 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1736 f0_0.setMesh(mm.getMeshAtLevel(0))
1737 ff.appendFieldNoProfileSBT(f0_0)
1738 ff0=ff.getTimeStepAtPos(0)
1739 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1740 f0_1.setTime(9.5,3,4)
1741 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1742 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1743 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1745 ff0.setFieldProfile(f0_1,mm,0,pfl)
1746 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1747 f0_2.setTime(9.5,3,4)
1748 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1749 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
1750 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1752 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1753 mfd.getFields().shallowCpyGlobs(ff0)
1755 mfd.unPolyzeMeshes()
1757 fmts=mfd.getFields()[0]
1758 self.assertEqual(fmts.getNumberOfTS(),1)
1759 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1760 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1761 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))])
1762 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1763 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1764 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1765 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1766 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1767 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1768 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1769 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))
1770 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1771 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1772 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1773 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1774 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1775 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])
1776 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1777 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1778 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1779 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])
1780 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1786 def testGaussWriteOnPfl1(self):
1787 fname="Pyfile49.med"
1788 fname2="Pyfile50.med"
1789 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1790 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1791 mQ8.allocateCells(1)
1792 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1793 mQ8.finishInsertingCells()
1794 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1795 mQ4.allocateCells(1)
1796 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1797 mQ4.finishInsertingCells()
1798 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1799 mT3.allocateCells(1)
1800 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1801 mT3.finishInsertingCells()
1803 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.]]
1804 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1805 ms[:]=(elt.deepCopy() for elt in ms)
1806 for m,t in zip(ms,tr):
1807 d=m.getCoords() ; d+= t
1809 m=MEDCouplingUMesh.MergeUMeshes(ms)
1811 m2=m[:13] ; m2.setName(m.getName())
1812 ### 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.
1813 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1814 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1817 da=DataArrayDouble(34) ; da.iota(3.)
1819 f.setName("fieldCellOnPflWithoutPfl")
1820 fInvalid=f.deepCopy()
1821 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])
1822 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])
1823 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])
1824 f.checkConsistencyLight()
1825 fInvalid2=fInvalid.deepCopy()
1826 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1829 mm.setMeshAtLevel(0,m)
1832 f1ts=MEDFileField1TS.New()
1833 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1834 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1835 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1836 f1ts.setFieldProfile(f,mm,0,pfl)
1839 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1840 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1841 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1842 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1843 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1844 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1845 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1846 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1848 dataRead=MEDFileData.New(fname)
1849 mRead=dataRead.getMeshes()[0]
1850 f1tsRead=dataRead.getFields()[0][0]
1851 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1852 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1853 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1854 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1855 f2_bis.checkConsistencyLight()
1856 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1858 WriteField(fname2,f,True)
1859 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1860 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1861 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1862 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1863 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1864 m2=m[pfl] ; m2.setName(m.getName())
1867 da=DataArrayDouble(35) ; da.iota(3.)
1869 f.setName("fieldCellOnPflWithoutPfl2")
1870 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1871 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])
1872 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])
1873 f.checkConsistencyLight()
1876 mm.setMeshAtLevel(0,m)
1878 f1ts=MEDFileField1TS.New()
1879 f1ts.setFieldProfile(f,mm,0,pfl)
1880 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1881 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1882 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1883 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1885 dataRead=MEDFileData.New(fname)
1886 mRead=dataRead.getMeshes()[0]
1887 f1tsRead=dataRead.getFields()[0][0]
1888 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1889 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1890 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1891 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1892 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1893 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1894 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1896 WriteField(fname2,f,True)
1897 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1898 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1899 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1900 ## Use case 3 : no pfl but creation of pfls due to gauss pts
1901 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1904 da=DataArrayDouble(60) ; da.iota(3.)
1906 f.setName("fieldCellWithoutPfl")
1907 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])
1908 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])
1909 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])
1910 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])
1911 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])
1912 f.checkConsistencyLight()
1914 mm.setMeshAtLevel(0,m)
1915 f1ts=MEDFileField1TS.New()
1916 f1ts.setFieldNoProfileSBT(f)
1917 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1918 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1919 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1920 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1921 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1925 dataRead=MEDFileData.New(fname)
1926 mRead=dataRead.getMeshes()[0]
1927 f1tsRead=dataRead.getFields()[0][0]
1928 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1929 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1930 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1931 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1932 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1933 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1935 WriteField(fname2,f,True)
1936 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1937 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1938 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1941 # Testing profile on nodes when the profile is identity but not on all nodes.
1943 def testMEDFieldPflOnNode1(self):
1944 fname="Pyfile51.med"
1945 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)
1946 m0=MEDCouplingUMesh("Mesh",2)
1948 m0.insertNextCell(NORM_TRI3,[1,4,2])
1949 m0.insertNextCell(NORM_TRI3,[4,5,2])
1950 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1951 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1952 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1953 m0.finishInsertingCells()
1955 m1=MEDCouplingUMesh(m0.getName(),1)
1957 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1959 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1961 m1.finishInsertingCells()
1965 m.setMeshAtLevel(0,m0)
1966 m.setMeshAtLevel(-1,m1)
1968 dt=3 ; it=2 ; tim=4.5
1969 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1970 fieldNode0.setName("fieldNode0")
1971 fieldNode0.setTime(tim,dt,it)
1972 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1973 arr=DataArrayDouble([10,11,12,13,14])
1974 fieldNode0.setArray(arr)
1975 f0=MEDFileField1TS()
1976 f0.setFieldProfile(fieldNode0,m,0,pfl0)
1977 m.write(fname,2) ; f0.write(fname,0)
1978 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1979 fieldNode1.setName("fieldNode1")
1980 fieldNode1.setTime(tim,dt,it)
1981 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1982 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1983 fieldNode1.setArray(arr1)
1984 f1=MEDFileField1TS()
1985 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1988 ## Reading from file
1989 m=MEDFileMesh.New(fname)
1990 m0=m.getMeshAtLevel(0)
1991 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1992 fieldNode0.setMesh(m00)
1993 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1994 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1995 ff0_1.checkConsistencyLight()
1996 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1997 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1998 ff0_2.checkConsistencyLight()
1999 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2000 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2001 ff0_3.checkConsistencyLight()
2002 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2003 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2004 ff0_4.checkConsistencyLight()
2005 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2006 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2007 m1=m.getMeshAtLevel(-1)
2008 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2009 fieldNode1.setMesh(m10)
2010 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2011 ff1_1.checkConsistencyLight()
2012 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2013 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2014 ff1_2.checkConsistencyLight()
2015 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2016 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2017 ff1_3.checkConsistencyLight()
2018 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2019 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2020 ff1_4.checkConsistencyLight()
2021 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2022 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]
2023 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]
2024 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]
2025 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2026 arr_r.setName(fieldNode1.getArray().getName())
2027 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2028 pfl1_r.setName(pfl1.getName())
2029 self.assertTrue(pfl1_r.isEqual(pfl1))
2032 # Testing profile on nodes when the profile is identity but not on all nodes.
2034 def testMEDFieldPflOnCell1(self):
2035 fname="Pyfile52.med"
2036 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)
2037 m0=MEDCouplingUMesh("Mesh",2)
2039 m0.insertNextCell(NORM_TRI3,[1,4,2])
2040 m0.insertNextCell(NORM_TRI3,[4,5,2])
2041 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2042 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2043 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2044 m0.finishInsertingCells()
2046 m1=MEDCouplingUMesh(m0.getName(),1)
2048 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2050 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2052 m1.finishInsertingCells()
2056 m.setMeshAtLevel(0,m0)
2057 m.setMeshAtLevel(-1,m1)
2059 dt=3 ; it=2 ; tim=4.5
2060 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2061 fieldCell0.setName("fieldCell0")
2062 fieldCell0.setTime(tim,dt,it)
2063 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2064 arr=DataArrayDouble([10,11,12])
2065 fieldCell0.setArray(arr)
2066 f0=MEDFileField1TS()
2067 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2068 m.write(fname,2) ; f0.write(fname,0)
2069 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2070 fieldCell1.setName("fieldCell1")
2071 fieldCell1.setTime(tim,dt,it)
2072 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2073 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2074 fieldCell1.setArray(arr1)
2075 f1=MEDFileField1TS()
2076 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2079 ## Reading from file
2080 m=MEDFileMesh.New(fname)
2081 m0=m.getMeshAtLevel(0)
2082 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2083 fieldCell0.setMesh(m00)
2084 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2085 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2086 ff0_1.checkConsistencyLight()
2087 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2088 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2089 ff0_2.checkConsistencyLight()
2090 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2091 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2092 ff0_3.checkConsistencyLight()
2093 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2094 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2095 ff0_4.checkConsistencyLight()
2096 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2097 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2098 m1=m.getMeshAtLevel(-1)
2099 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2100 fieldCell1.setMesh(m10)
2101 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2102 ff1_1.checkConsistencyLight()
2103 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2104 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2105 ff1_2.checkConsistencyLight()
2106 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2107 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2108 ff1_3.checkConsistencyLight()
2109 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2110 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2111 ff1_4.checkConsistencyLight()
2112 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2113 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]
2114 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]
2115 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]
2116 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2117 arr_r.setName(fieldCell1.getArray().getName())
2118 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2119 pfl1_r.setName(pfl1.getName())
2120 self.assertTrue(pfl1_r.isEqual(pfl1))
2124 def testMEDFileUMeshZipCoords1(self):
2126 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2127 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])
2128 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2129 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2130 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2131 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2132 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2133 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2134 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2135 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2136 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2137 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2139 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2140 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2141 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2142 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2143 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2144 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2145 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2146 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2147 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2151 def testMEDUMeshAddNodeGroup1(self):
2152 fname="Pyfile53.med"
2154 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2155 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])
2156 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2157 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2158 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2159 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2160 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2163 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2164 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2165 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2166 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2167 mm.setFamilyId("MyFam",2)
2168 mm.setFamilyId("MyOtherFam",3)
2169 mm.setFamilyId("MyOther-1",-1)
2170 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2171 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2173 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2175 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2176 mm.addNodeGroup(daTest)
2177 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2178 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
2180 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2181 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2183 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2184 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2185 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2186 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2188 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2189 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2190 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2191 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2192 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2193 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2195 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2196 da=DataArrayInt([3,12]) ; da.setName("grp0")
2197 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2199 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2201 mm=MEDFileMesh.New(fname)
2202 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2203 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2204 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2205 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2207 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2208 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2209 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2210 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2211 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2212 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2214 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2215 da=DataArrayInt([3,12]) ; da.setName("grp0")
2216 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2218 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2222 def testMEDUMeshAddGroup1(self):
2223 fname="Pyfile54.med"
2225 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2226 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2228 m0.insertNextCell(NORM_TRI3,[1,2,1])
2231 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2234 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2236 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2237 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2238 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2239 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2240 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2243 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2244 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2245 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2246 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2247 mm.setFamilyId("MyFam",2)
2248 mm.setFamilyId("MyOtherFam",3)
2249 mm.setFamilyId("MyOther-1",-1)
2250 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2251 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2253 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2254 mm.addGroup(0,daTest)
2255 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2256 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2257 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2258 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2260 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2261 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2262 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2263 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2264 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2265 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2267 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2268 da=DataArrayInt([3,12]) ; da.setName("grp0")
2269 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2271 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2273 mm=MEDFileMesh.New(fname)
2274 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2275 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2276 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2277 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2279 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2280 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2281 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2282 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2283 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2284 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2286 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2287 da=DataArrayInt([3,12]) ; da.setName("grp0")
2288 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2290 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2294 def testHeapMem1(self):
2295 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2297 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2299 m=MEDCouplingCMesh()
2300 arr=DataArrayDouble(10,1) ; arr.iota(0)
2301 m.setCoords(arr,arr)
2302 m=m.buildUnstructured()
2304 f=m.getMeasureField(False)
2305 cooMem = 100 * 2 * 8
2306 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2307 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2308 meshMem = cooMem + nodalMem + indexMem
2309 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2310 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2311 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2314 mm.setMeshAtLevel(0,m)
2315 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2316 ff=MEDFileField1TS()
2317 ff.setFieldNoProfileSBT(f)
2318 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2320 fff=MEDFileFieldMultiTS()
2321 fff.appendFieldNoProfileSBT(f)
2322 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2324 fff.appendFieldNoProfileSBT(f)
2325 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2326 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2329 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2330 fff.appendFieldProfile(f2,mm,0,pfl)
2331 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2332 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2333 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2336 def internalCurveLinearMesh1(self):
2337 fname="Pyfile55.med"
2338 mesh=MEDCouplingCurveLinearMesh();
2339 mesh.setTime(2.3,4,5);
2340 mesh.setTimeUnit("us");
2341 mesh.setName("Example of Cuve linear mesh");
2342 mesh.setDescription("buildCLMesh");
2343 a1=DataArrayDouble(3*20,1);
2344 a1.iota(7.) ; a1.rearrange(3);
2346 mesh.setNodeGridStructure([4,5]);
2347 mesh.checkConsistencyLight();
2349 m=MEDFileCurveLinearMesh()
2351 d=DataArrayInt(20) ; d.iota(4)
2352 m.setFamilyFieldArr(1,d)
2353 d3=DataArrayInt(20) ; d3.iota(400)
2354 m.setRenumFieldArr(1,d3)
2355 d2=DataArrayInt(12) ; d2.iota(40)
2356 m.setFamilyFieldArr(0,d2)
2357 d4=DataArrayInt(21) ; d4.iota(4000)
2358 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2360 m.setRenumFieldArr(1,d4)
2363 m1=MEDFileCurveLinearMesh(fname)
2365 self.assertTrue(mm.isEqual(mesh,1e-12))
2366 self.assertEqual(mm.getSpaceDimension(),3)
2367 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2369 m1=MEDFileMesh.New(fname)
2370 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2371 self.assertTrue(isinstance(m1.getUnivName(),str))
2372 self.assertTrue(len(m1.getUnivName())!=0)
2373 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2377 def testCurveLinearMesh1(self):
2378 self.internalCurveLinearMesh1()
2381 def testParameters1(self):
2382 self.internalParameters1()
2384 def internalParameters1(self):
2385 fname="Pyfile56.med"
2386 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2387 mm=MEDFileCMesh() ; mm.setMesh(m)
2388 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2390 p=MEDFileParameters()
2391 data.setParams(p) ; data.setMeshes(ms)
2392 pts=MEDFileParameterMultiTS()
2393 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2394 pts.appendValue(1,2,3.4,567.89)
2395 pts.appendValue(2,3,5.6,999.123)
2396 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2397 p.pushParam(pts) ; p.pushParam(pts2)
2399 p2=MEDFileParameters(fname)
2400 self.assertTrue(p.isEqual(p2,1e-14)[0])
2401 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2403 pts4=pts2.deepCopy()
2404 pts3=pts2.deepCopy()
2405 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2406 pts2.eraseTimeStepIds([0])
2407 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2409 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2410 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2411 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2412 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2413 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2415 self.assertTrue(p.isEqual(p2,1e-14)[0])
2416 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2417 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2418 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2419 self.assertEqual(p.getParamsNames(),('A','B'))
2420 ptsr=MEDFileParameterMultiTS(fname,"B")
2421 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2422 ptsr=MEDFileParameterMultiTS(fname)
2423 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2424 p1tsr=MEDFileParameterDouble1TS(fname)
2425 self.assertEqual(p1tsr.getName(),"A")
2426 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2427 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2428 self.assertEqual(p1tsr.getName(),"B")
2429 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2430 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2431 self.assertEqual(p1tsr.getName(),"B")
2432 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2433 data2=MEDFileData(fname)
2434 self.assertEqual(2,data2.getNumberOfParams())
2435 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2439 def testNamesOnCellAndNodesInMeshes1(self):
2440 fname="Pyfile58.med"
2441 fname2="Pyfile59.med"
2442 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2443 m1=m.buildDescendingConnectivity()[0]
2444 m1.sortCellsInMEDFileFrmt()
2447 mm.setMeshAtLevel(0,m)
2448 mm.setMeshAtLevel(-1,m1)
2449 namesCellL0=DataArrayAsciiChar(6,16)
2450 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2451 mm.setNameFieldAtLevel(0,namesCellL0)
2452 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2453 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2454 mm.setNameFieldAtLevel(-1,namesCellL1)
2455 namesNodes=namesCellL1.subArray(4,16)
2456 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2457 mm.setNameFieldAtLevel(1,namesNodes)
2460 mmr=MEDFileMesh.New(fname)
2461 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2462 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2463 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2464 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2465 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2466 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2467 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2468 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2470 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2471 # remove names on nodes
2472 mmCpy.setNameFieldAtLevel(1,None)
2473 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2474 mm.setNameFieldAtLevel(1,None)
2475 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2476 mm.setNameFieldAtLevel(-1,None)
2478 mmr=MEDFileMesh.New(fname)
2479 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2480 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2481 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2483 c=MEDCouplingCMesh()
2484 arr=DataArrayDouble([0.,1.1,2.3])
2485 c.setCoords(arr,arr)
2489 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2490 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2492 ccr=MEDFileMesh.New(fname2)
2493 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2494 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2495 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2496 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2497 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2498 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2499 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2501 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2505 def testToExportInExamples1(self):
2506 m=MEDCouplingCMesh()
2507 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2508 m.setCoords(arr,arr)
2509 m=m.buildUnstructured() ; m.setName("mesh")
2510 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2511 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2514 mm.setMeshAtLevel(0,m)
2515 mm.setMeshAtLevel(-1,m2)
2516 mm.setGroupsAtLevel(0,[grp1,grp2])
2517 mm.write("example.med",2)
2519 m0=mm.getMeshAtLevel(0)
2520 m1=mm.getMeshAtLevel(-1)
2521 grp1=mm.getGroupArr(0,"grp1")
2522 grp2=mm.getGroupArr(0,"grp2")
2524 whichGrp=DataArrayInt(m0.getNumberOfCells())
2525 whichGrp.fillWithValue(-1)
2526 for grpId,grp in enumerate(grps):
2529 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2530 e,f=a.areCellsIncludedIn(m1,2)
2532 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2533 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2534 c2.transformWithIndArr(whichGrp)
2535 splitOfM1=len(grps)*[None]
2536 for grpId,grp in enumerate(grps):
2537 tmp=c2.findIdsEqual(grpId)
2538 splitOfM1[grpId]=tmp
2540 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2541 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2545 def testBugCorrection1(self):
2548 self.assertEqual(fs[0],None)
2549 self.assertEqual(3,len(fs))
2553 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2554 f1Name="Pyfile60.med"
2555 f2Name="Pyfile61.med"
2556 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2558 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2560 # reading and compare
2561 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2562 for mn in d1.getMeshes().getMeshesNames():
2563 m1=d1.getMeshes()[mn]
2564 m2=d2.getMeshes()[mn]
2565 for lev in m1.getNonEmptyLevels():
2566 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2567 for grpName in grpsNames:
2568 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2572 for fieldn in d1.getFields().getFieldsNames():
2573 f1=d1.getFields()[fieldn]
2574 f2=d2.getFields()[fieldn]
2575 for it,order,tim in f1.getTimeSteps():
2578 if len(f1t.getPflsReallyUsed())!=0:
2580 for lev in f1t.getNonEmptyLevels()[1]:
2581 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2582 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2583 self.assertTrue(pfl1.isEqual(pfl2))
2584 self.assertTrue(arr1.isEqual(arr2,1e-10))
2589 for lev in f1t.getNonEmptyLevels()[1]:
2590 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2591 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2592 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2600 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2601 m=MEDCouplingCMesh()
2602 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2603 m.setCoords(arr,arr,arr)
2604 m=m.buildUnstructured()
2605 m2=m.buildDescendingConnectivity()[0]
2607 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2608 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2609 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2610 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2611 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2612 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2614 mm.setMeshAtLevel(0,m)
2615 mm.setGroupsAtLevel(0,[g1,g2])
2616 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2617 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2618 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2619 mm.normalizeFamIdsMEDFile()
2620 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2621 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2622 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2623 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2624 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2625 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2626 for g in mm.getGroupsOnSpecifiedLev(0):
2627 for f in mm.getFamiliesIdsOnGroup(g):
2628 self.assertTrue(f<0)
2633 mm.setMeshAtLevel(0,m)
2634 mm.setMeshAtLevel(-1,m2)
2635 mm.setGroupsAtLevel(0,[g1,g2])
2636 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2637 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2638 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2639 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2640 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2641 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2642 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2643 mm.normalizeFamIdsMEDFile()
2644 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2645 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2646 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2647 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2648 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2649 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2650 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2651 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2652 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2653 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2654 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2655 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2657 for g in mm.getGroupsOnSpecifiedLev(lev):
2658 for f in mm.getFamiliesIdsOnGroup(g):
2659 self.assertTrue(f<0)
2665 mm.setMeshAtLevel(0,m)
2666 mm.setMeshAtLevel(-1,m2)
2667 mm.setGroupsAtLevel(0,[g1,g2])
2668 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2669 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2670 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2671 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2672 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2673 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2674 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2675 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2676 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2677 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2678 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2679 mm.normalizeFamIdsMEDFile()
2680 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2681 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2682 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2683 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2684 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2685 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2686 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2687 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2688 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2689 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2690 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2691 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2692 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2693 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2694 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2695 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2696 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2697 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2699 for g in mm.getGroupsOnSpecifiedLev(lev):
2700 for f in mm.getFamiliesIdsOnGroup(g):
2701 self.assertTrue(f<0)
2705 for g in mm.getGroupsOnSpecifiedLev(1):
2706 for f in mm.getFamiliesIdsOnGroup(g):
2707 self.assertTrue(f>0)
2713 def testNonRegressionMantis22212ChangeGrpName(self):
2714 fileName="Pyfile62.med"
2715 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2716 m=MEDFileUMesh.New()
2717 m.setCoords(m2.getCoords())
2718 m.setMeshAtLevel(0,m2)
2719 m.setMeshAtLevel(-1,m1)
2720 m.setMeshAtLevel(-2,m0)
2721 m.setFamilyFieldArr(0,f2)
2722 m.setFamilyFieldArr(-1,f1)
2723 m.setFamilyFieldArr(-2,f0)
2724 m.setFamilyFieldArr(1,p)
2726 for i in range(nbOfFams):
2727 m.addFamily(fns[i],fids[i])
2730 for i in range(nbOfGrps):
2731 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2733 m.setName(m2.getName())
2734 m.setDescription(m2.getDescription())
2737 mm0=MEDFileMesh.New(fileName)
2738 mm1=MEDFileMesh.New(fileName)
2739 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2740 for name in groupNamesIni:
2741 mm1.changeGroupName(name,name+'N')
2743 mm1.write(fileName,2)
2746 mm2=MEDFileMesh.New(fileName)
2747 for name in groupNamesIni:
2748 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2749 arr0=mm0.getGroupArr(lev,name)
2750 arr2=mm2.getGroupArr(lev,name+'N')
2751 arr0.setName(name+'N')
2752 self.assertTrue(arr0.isEqual(arr2))
2758 def testInt32InMEDFileFieldStar1(self):
2759 self.internalInt32InMEDFileFieldStar1()
2761 def internalInt32InMEDFileFieldStar1(self):
2762 fname="Pyfile63.med"
2763 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2764 f1=f1.convertToIntField()
2766 mm1=MEDFileUMesh.New()
2767 mm1.setCoords(m1.getCoords())
2768 mm1.setMeshAtLevel(0,m1)
2769 mm1.setName(m1.getName())
2771 ff1=MEDFileIntField1TS()
2772 ff1.setFieldNoProfileSBT(f1)
2773 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2774 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2775 self.assertTrue(a.isEqual(f1,1e-12,0))
2777 a,b=ff1.getUndergroundDataArrayExt()
2778 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2779 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2780 ff2=MEDFileAnyTypeField1TS.New(fname)
2781 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2782 self.assertEqual(ff2.getTime(),[0,1,2.0])
2783 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2784 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2785 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2786 self.assertTrue(a.isEqual(f1,1e-12,0))
2788 c=ff2.getUndergroundDataArray() ; c*=2
2789 ff2.write(fname,0) # 2 time steps in
2790 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2791 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2792 self.assertEqual(len(ffs1),2)
2793 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2794 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2795 self.assertTrue(a.isEqual(f1,1e-12,0))
2796 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2797 self.assertTrue(a.isEqual(f1,1e-12,0))
2798 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2799 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2800 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2801 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2802 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2803 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2805 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2808 self.assertTrue(bc.isEqual(3*f1.getArray()))
2809 nf1=MEDCouplingFieldInt(ON_NODES)
2810 nf1.setTime(9.,10,-1)
2811 nf1.setMesh(f1.getMesh())
2812 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2813 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2814 nff1=MEDFileIntField1TS.New()
2815 nff1.setFieldNoProfileSBT(nf1)
2816 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2817 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2820 nf2=MEDCouplingFieldInt(ON_NODES)
2821 nf2.setTime(19.,20,-11)
2822 nf2.setMesh(f1.getMesh())
2823 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2824 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2825 nff2=MEDFileIntField1TS.New()
2826 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2827 nff2.setFieldProfile(nf2,mm1,0,npfl)
2828 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2829 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2830 self.assertTrue(b.isEqual(npfl))
2831 self.assertTrue(a.isEqual(narr2))
2833 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2834 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2835 self.assertTrue(b.isEqual(npfl))
2836 self.assertTrue(a.isEqual(narr2))
2838 nf3=MEDCouplingFieldDouble(ON_NODES)
2839 nf3.setName("VectorFieldOnNodesDouble")
2840 nf3.setTime(29.,30,-21)
2841 nf3.setMesh(f1.getMesh())
2842 nf3.setArray(f1.getMesh().getCoords())
2843 nff3=MEDFileField1TS.New()
2844 nff3.setFieldNoProfileSBT(nf3)
2846 fs=MEDFileFields(fname)
2847 self.assertEqual(len(fs),4)
2848 ffs=[it for it in fs]
2849 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2850 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2851 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2852 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2854 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2855 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2856 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2857 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2858 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2860 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2861 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2862 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2863 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2864 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2865 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2866 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2867 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2869 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2870 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2871 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2872 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2876 def testMEDFileFields1(self):
2877 fname="Pyfile64.med"
2878 f1=MEDCouplingFieldDouble(ON_NODES)
2879 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2880 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2881 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2883 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2885 f1.setName("Field1")
2886 ff1=MEDFileField1TS.New()
2887 ff1.setFieldNoProfileSBT(f1)
2888 self.assertEqual(ff1.getDtUnit(),"us")
2890 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2891 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2893 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2894 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2895 ff1s.setName("Field2")
2897 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2898 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2899 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2900 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2901 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2902 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2903 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2904 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2907 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2909 def testMEDFileFields2(self):
2910 fname="Pyfile65.med"
2911 # to check that all is initialize
2912 MEDFileField1TS().__str__()
2913 MEDFileFieldMultiTS().__str__()
2914 # building a mesh containing 4 tri3 + 5 quad4
2915 tri=MEDCouplingUMesh("tri",2)
2916 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2917 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2918 tris = [tri.deepCopy() for i in range(4)]
2919 for i,elt in enumerate(tris): elt.translate([i,0])
2920 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2921 quad=MEDCouplingUMesh("quad",2)
2922 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2923 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2924 quads = [quad.deepCopy() for i in range(5)]
2925 for i,elt in enumerate(quads): elt.translate([5+i,0])
2926 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2927 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2928 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2930 fmts0_0=MEDFileFieldMultiTS()
2931 fmts0_1=MEDFileFieldMultiTS()
2934 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2935 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2936 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2937 f.setTime(float(i+1)+0.1,i+1,-i-1)
2938 fmts0_0.appendFieldNoProfileSBT(f)
2939 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2940 self.assertEqual(fmts0_1.getName(),name1)
2941 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2942 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2944 # components names have been modified to generate errors
2945 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2946 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2947 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2948 f1ts.setInfo(['aa [bb]','eee [dd]'])
2949 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2951 # add a mismatch of nb of compos
2953 fmts0_2=fmts0_0.deepCopy()
2954 fmts0_3=fmts0_0.deepCopy()
2955 fmts0_4=fmts0_0.deepCopy()
2956 fmts0_5=fmts0_0.shallowCpy()
2957 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)
2959 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2960 del fmts0_3[[1.1,(6,-6),9]]
2961 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2962 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2963 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2964 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2965 fmts0_7=fmts0_4[::-3]
2966 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2967 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2970 fs0.pushField(fmts0_0)
2971 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2972 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2973 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2974 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2976 fs0=MEDFileFields(fname)
2977 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2978 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2979 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2980 del fs1[["2ndField",3]]
2981 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2982 fs2=fs0[[0,"4thField"]]
2983 self.assertTrue(isinstance(fs2,MEDFileFields))
2984 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2986 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2989 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2991 def testMEDFileFields3(self):
2992 fname="Pyfile66.med"
2993 # building a mesh containing 4 tri3 + 5 quad4
2994 tri=MEDCouplingUMesh("tri",2)
2995 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2996 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2997 tris = [tri.deepCopy() for i in range(4)]
2998 for i,elt in enumerate(tris): elt.translate([i,0])
2999 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3000 quad=MEDCouplingUMesh("quad",2)
3001 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3002 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3003 quads = [quad.deepCopy() for i in range(5)]
3004 for i,elt in enumerate(quads): elt.translate([5+i,0])
3005 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3006 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3007 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3009 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3011 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3012 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3013 fmts0_0=MEDFileFieldMultiTS()
3014 fmts0_1=MEDFileFieldMultiTS()
3017 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3018 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3019 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3020 f.setTime(float(i+1)+0.1,i+1,-i-1)
3021 fmts0_0.appendFieldProfile(f,mm,0,pfl)
3022 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3023 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3024 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3027 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3028 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3029 fmts0_0.zipPflsNames()
3030 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3031 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3032 fmts0_2=fmts0_0.deepCopy()
3033 fmts0_3=fmts0_0.deepCopy()
3034 fmts0_4=fmts0_0.deepCopy()
3036 fs0.pushField(fmts0_0)
3037 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3038 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3039 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3040 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3042 fmts0_5=MEDFileFieldMultiTS()
3044 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3045 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3046 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3047 f.setTime(float(i+1)+0.1,i+1,-i-1)
3048 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3050 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3051 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3052 fs0.checkGlobsCoherency()
3057 def testSplitComponents1(self):
3058 fname="Pyfile67.med"
3059 # building a mesh containing 4 tri3 + 5 quad4
3060 tri=MEDCouplingUMesh("tri",2)
3061 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3062 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3063 tris = [tri.deepCopy() for i in range(4)]
3064 for i,elt in enumerate(tris): elt.translate([i,0])
3065 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3066 quad=MEDCouplingUMesh("quad",2)
3067 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3068 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3069 quads = [quad.deepCopy() for i in range(5)]
3070 for i,elt in enumerate(quads): elt.translate([5+i,0])
3071 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3072 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3073 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3075 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3077 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3078 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3080 fmts0_1=MEDFileFieldMultiTS()
3082 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3085 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3086 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3087 f.setTime(float(i+1)+0.1,i+1,-i-1)
3088 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3089 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3091 fs.pushField(fmts0_1)
3092 self.assertEqual(1,len(fs))
3093 l=fmts0_1.splitComponents()
3094 self.assertEqual(3,len(l))
3095 for elt in l: self.assertEqual(10,len(elt))
3096 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3098 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3101 self.assertEqual(4,len(fs))
3102 for elt in fs: self.assertEqual(10,len(elt))
3103 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3104 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3106 fs.write(fname,0) ; del fs
3108 fs1=MEDFileFields(fname)
3109 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3110 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3111 self.assertEqual(4,len(fs1))
3113 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3114 f1ts=fs1[fieldName][i]
3115 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3116 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3117 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3119 f1ts=fs1["1stField"][i]
3120 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3121 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3122 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3127 def testMEDFileFieldConvertTo1(self):
3128 fname="Pyfile68.med"
3129 # building a mesh containing 4 tri3 + 5 quad4
3130 tri=MEDCouplingUMesh("tri",2)
3131 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3132 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3133 tris = [tri.deepCopy() for i in range(4)]
3134 for i,elt in enumerate(tris): elt.translate([i,0])
3135 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3136 quad=MEDCouplingUMesh("quad",2)
3137 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3138 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3139 quads = [quad.deepCopy() for i in range(5)]
3140 for i,elt in enumerate(quads): elt.translate([5+i,0])
3141 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3142 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3143 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3144 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3146 ff0=MEDFileField1TS()
3147 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")
3148 f0.checkConsistencyLight()
3149 ff0.setFieldNoProfileSBT(f0)
3151 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3152 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3154 ff0i=ff0.convertToInt()
3155 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3156 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3158 ff1=ff0i.convertToDouble()
3159 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3160 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3162 ff0i64=ff0.convertToInt64()
3163 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3164 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3166 ff2=ff0i64.convertToDouble()
3167 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3168 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3170 del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3171 ff0=MEDFileField1TS()
3172 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")
3173 f0.checkConsistencyLight()
3174 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3175 ff0.setFieldProfile(f0,mm,0,pfl)
3176 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3177 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3179 ff0i=ff0.convertToInt()
3180 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3181 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3182 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3184 ff1=ff0i.convertToDouble()
3185 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3186 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3187 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3189 ff0i64=ff0.convertToInt64()
3190 self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3191 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3192 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3194 ff2=ff0i64.convertToDouble()
3195 self.assertTrue(isinstance(ff2,MEDFileField1TS))
3196 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3197 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3199 ff0=MEDFileFieldMultiTS()
3200 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)
3201 f0.checkConsistencyLight()
3202 ff0.appendFieldProfile(f0,mm,0,pfl)
3203 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)
3204 f0.checkConsistencyLight()
3205 ff0.appendFieldProfile(f0,mm,0,pfl)
3206 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)
3207 f0.checkConsistencyLight()
3208 ff0.appendFieldProfile(f0,mm,0,pfl)
3209 ff1=ff0.convertToInt()
3210 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3211 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3212 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3213 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3214 arr=ff1.getUndergroundDataArray(dt,it)
3215 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3217 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3222 ff1=ff1.convertToDouble()
3223 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3224 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3225 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3226 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3227 arr=ff1.getUndergroundDataArray(dt,it)
3228 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3230 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3232 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3233 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3234 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3235 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3236 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3237 arr=ff1.getUndergroundDataArray(dt,it)
3238 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3240 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3244 def testMEDFileFieldPartialLoading(self):
3245 fname="Pyfile69.med"
3247 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3249 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3250 # building a mesh containing 30 tri3 + 40 quad4
3251 tri=MEDCouplingUMesh("tri",2)
3252 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3253 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3254 tris = [tri.deepCopy() for i in range(30)]
3255 for i,elt in enumerate(tris): elt.translate([i,0])
3256 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3257 quad=MEDCouplingUMesh("quad",2)
3258 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3259 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3260 quads = [quad.deepCopy() for i in range(40)]
3261 for i,elt in enumerate(quads): elt.translate([40+i,0])
3262 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3263 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3264 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3265 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3267 ff0=MEDFileField1TS()
3268 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")
3269 f0.checkConsistencyLight()
3270 ff0.setFieldNoProfileSBT(f0)
3273 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3274 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3276 ff0=MEDFileField1TS()
3277 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")
3278 f0.checkConsistencyLight()
3279 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3280 ff0.setFieldProfile(f0,mm,0,pfl)
3281 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3282 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3285 ff0=MEDFileField1TS(fname,False)
3286 self.assertEqual(ff0.getName(),"FieldCell")
3287 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3288 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3289 heap_memory_ref=ff0.getHeapMemorySize()
3290 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3292 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3293 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3294 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3296 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3297 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3298 heap_memory_ref=ff0.getHeapMemorySize()
3299 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3301 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3302 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3303 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3305 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3306 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3307 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3308 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3310 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3311 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3312 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3313 ff0.loadArraysIfNecessary() ##
3314 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3315 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3316 heap_memory_ref=ff0.getHeapMemorySize()
3317 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3319 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3320 self.assertEqual(hmd,-800) # -50*8*2
3322 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3324 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3325 heap_memory_ref=ff0.getHeapMemorySize()
3326 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3328 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3329 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3331 fieldName="FieldCellMultiTS"
3332 ff0=MEDFileFieldMultiTS()
3334 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)
3335 f0.setTime(float(t)+0.1,t,100+t)
3336 f0.checkConsistencyLight()
3337 ff0.appendFieldNoProfileSBT(f0)
3341 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3342 heap_memory_ref=ff0.getHeapMemorySize()
3343 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3345 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3348 ffs=MEDFileFields(fname,False)
3349 heap_memory_ref=ffs.getHeapMemorySize()
3350 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3352 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3356 def testMEDFileMeshReadSelector1(self):
3357 mrs=MEDFileMeshReadSelector()
3358 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3359 mrs.__str__() ; mrs.__repr__()
3361 mrs=MEDFileMeshReadSelector(0)
3362 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())
3363 mrs=MEDFileMeshReadSelector(1)
3364 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3365 mrs=MEDFileMeshReadSelector(2)
3366 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3367 mrs=MEDFileMeshReadSelector(3)
3368 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3369 mrs=MEDFileMeshReadSelector(4)
3370 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3371 mrs=MEDFileMeshReadSelector(5)
3372 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3373 mrs=MEDFileMeshReadSelector(6)
3374 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3375 mrs=MEDFileMeshReadSelector(7)
3376 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3377 mrs=MEDFileMeshReadSelector(8)
3378 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3379 mrs=MEDFileMeshReadSelector(9)
3380 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3381 mrs=MEDFileMeshReadSelector(10)
3382 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3383 mrs=MEDFileMeshReadSelector(11)
3384 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3385 mrs=MEDFileMeshReadSelector(12)
3386 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3387 mrs=MEDFileMeshReadSelector(13)
3388 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3389 mrs=MEDFileMeshReadSelector(14)
3390 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3391 mrs=MEDFileMeshReadSelector(15)
3392 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3393 mrs=MEDFileMeshReadSelector(16)
3394 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3395 mrs=MEDFileMeshReadSelector(17)
3396 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3397 mrs=MEDFileMeshReadSelector(18)
3398 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3399 mrs=MEDFileMeshReadSelector(19)
3400 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3401 mrs=MEDFileMeshReadSelector(20)
3402 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3403 mrs=MEDFileMeshReadSelector(21)
3404 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3405 mrs=MEDFileMeshReadSelector(22)
3406 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3407 mrs=MEDFileMeshReadSelector(23)
3408 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3409 mrs=MEDFileMeshReadSelector(24)
3410 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3411 mrs=MEDFileMeshReadSelector(25)
3412 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3413 mrs=MEDFileMeshReadSelector(26)
3414 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3415 mrs=MEDFileMeshReadSelector(27)
3416 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3417 mrs=MEDFileMeshReadSelector(28)
3418 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3419 mrs=MEDFileMeshReadSelector(29)
3420 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3421 mrs=MEDFileMeshReadSelector(30)
3422 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3423 mrs=MEDFileMeshReadSelector(31)
3424 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3425 mrs=MEDFileMeshReadSelector(32)
3426 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3427 mrs=MEDFileMeshReadSelector(33)
3428 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3429 mrs=MEDFileMeshReadSelector(34)
3430 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3431 mrs=MEDFileMeshReadSelector(35)
3432 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3433 mrs=MEDFileMeshReadSelector(36)
3434 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3435 mrs=MEDFileMeshReadSelector(37)
3436 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3437 mrs=MEDFileMeshReadSelector(38)
3438 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3439 mrs=MEDFileMeshReadSelector(39)
3440 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3441 mrs=MEDFileMeshReadSelector(40)
3442 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3443 mrs=MEDFileMeshReadSelector(41)
3444 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3445 mrs=MEDFileMeshReadSelector(42)
3446 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3447 mrs=MEDFileMeshReadSelector(43)
3448 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3449 mrs=MEDFileMeshReadSelector(44)
3450 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3451 mrs=MEDFileMeshReadSelector(45)
3452 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3453 mrs=MEDFileMeshReadSelector(46)
3454 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3455 mrs=MEDFileMeshReadSelector(47)
3456 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3457 mrs=MEDFileMeshReadSelector(48)
3458 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3459 mrs=MEDFileMeshReadSelector(49)
3460 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3461 mrs=MEDFileMeshReadSelector(50)
3462 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3463 mrs=MEDFileMeshReadSelector(51)
3464 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3465 mrs=MEDFileMeshReadSelector(52)
3466 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3467 mrs=MEDFileMeshReadSelector(53)
3468 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3469 mrs=MEDFileMeshReadSelector(54)
3470 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3471 mrs=MEDFileMeshReadSelector(55)
3472 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3473 mrs=MEDFileMeshReadSelector(56)
3474 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3475 mrs=MEDFileMeshReadSelector(57)
3476 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3477 mrs=MEDFileMeshReadSelector(58)
3478 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3479 mrs=MEDFileMeshReadSelector(59)
3480 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3481 mrs=MEDFileMeshReadSelector(60)
3482 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3483 mrs=MEDFileMeshReadSelector(61)
3484 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3485 mrs=MEDFileMeshReadSelector(62)
3486 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3487 mrs=MEDFileMeshReadSelector(63)
3488 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3490 mrs=MEDFileMeshReadSelector(63)
3491 mrs.setCellFamilyFieldReading(False)
3492 self.assertEqual(mrs.getCode(),62)
3493 mrs.setCellFamilyFieldReading(True)
3494 self.assertEqual(mrs.getCode(),63)
3495 mrs.setNodeFamilyFieldReading(False)
3496 self.assertEqual(mrs.getCode(),61)
3497 mrs.setNodeFamilyFieldReading(True)
3498 self.assertEqual(mrs.getCode(),63)
3499 mrs.setCellNameFieldReading(False)
3500 self.assertEqual(mrs.getCode(),59)
3501 mrs.setCellNameFieldReading(True)
3502 self.assertEqual(mrs.getCode(),63)
3503 mrs.setNodeNameFieldReading(False)
3504 self.assertEqual(mrs.getCode(),55)
3505 mrs.setNodeNameFieldReading(True)
3506 self.assertEqual(mrs.getCode(),63)
3507 mrs.setCellNumFieldReading(False)
3508 self.assertEqual(mrs.getCode(),47)
3509 mrs.setCellNumFieldReading(True)
3510 self.assertEqual(mrs.getCode(),63)
3511 mrs.setNodeNumFieldReading(False)
3512 self.assertEqual(mrs.getCode(),31)
3513 mrs.setNodeNumFieldReading(True)
3514 self.assertEqual(mrs.getCode(),63)
3518 def testPartialReadOfMeshes(self):
3519 fname="Pyfile70.med"
3520 # building a mesh containing 4 tri3 + 5 quad4
3521 tri=MEDCouplingUMesh("tri",2)
3522 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3523 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3524 tris = [tri.deepCopy() for i in range(4)]
3525 for i,elt in enumerate(tris): elt.translate([i,0])
3526 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3527 quad=MEDCouplingUMesh("quad",2)
3528 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3529 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3530 quads = [quad.deepCopy() for i in range(5)]
3531 for i,elt in enumerate(quads): elt.translate([5+i,0])
3532 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3533 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3534 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3535 m1=m.buildDescendingConnectivity()[0]
3536 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3538 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3539 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3540 mm.setGroupsAtLevel(0,[grp0,grp1])
3541 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3542 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3543 mm.setGroupsAtLevel(-1,[grp2,grp3])
3544 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3545 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3546 mm.setGroupsAtLevel(1,[grp4,grp5])
3547 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3548 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3549 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3553 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3554 b4_ref_heap_mem=mm.getHeapMemorySize()
3555 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3556 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3557 ref_heap_mem=mm.getHeapMemorySize()
3558 # check the gain of memory using 1GTUMesh instead of UMesh
3559 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
3561 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3562 self.assertEqual(len(mm.getGroupsNames()),0)
3563 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3564 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3565 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3566 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3567 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3568 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3569 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3570 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3571 delta1=ref_heap_mem-mm.getHeapMemorySize()
3572 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3574 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3575 self.assertEqual(len(mm.getGroupsNames()),6)
3576 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3577 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3578 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3579 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3580 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3581 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3582 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3583 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3584 delta2=ref_heap_mem-mm.getHeapMemorySize()
3585 self.assertTrue(delta2<delta1)
3586 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3588 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3589 self.assertEqual(len(mm.getGroupsNames()),6)
3590 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3591 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3592 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3593 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3594 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3595 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3596 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3597 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3598 delta3=ref_heap_mem-mm.getHeapMemorySize()
3599 self.assertTrue(delta3<delta2)
3600 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3602 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3603 self.assertEqual(len(mm.getGroupsNames()),6)
3604 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3605 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3606 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3607 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3608 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3609 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3610 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3611 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3612 delta4=ref_heap_mem-mm.getHeapMemorySize()
3613 self.assertTrue(delta4<delta3)
3614 self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3616 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3617 self.assertEqual(len(mm.getGroupsNames()),6)
3618 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3619 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3620 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3621 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3622 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3623 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3624 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3625 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3626 delta5=ref_heap_mem-mm.getHeapMemorySize()
3627 self.assertTrue(delta5<delta4)
3628 self.assertEqual(delta5,0)
3631 # this test checks that setFieldProfile perform a check of the array length
3632 # compared to the profile length. This test also checks that mesh attribute of field
3633 # is not used by setFieldProfile (because across this test mesh is equal to None)
3635 def testCheckCompatibilityPfl1(self):
3636 # building a mesh containing 4 tri3 + 5 quad4
3637 tri=MEDCouplingUMesh("tri",2)
3638 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3639 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3640 tris = [tri.deepCopy() for i in range(4)]
3641 for i,elt in enumerate(tris): elt.translate([i,0])
3642 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3643 quad=MEDCouplingUMesh("quad",2)
3644 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3645 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3646 quads = [quad.deepCopy() for i in range(5)]
3647 for i,elt in enumerate(quads): elt.translate([5+i,0])
3648 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3649 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3650 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3651 m1=m.buildDescendingConnectivity()[0]
3652 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3654 f1ts=MEDFileField1TS()
3655 f=MEDCouplingFieldDouble(ON_NODES)
3656 vals=DataArrayDouble(7) ; vals.iota(1000)
3658 f.setName("anonymous") # f has no mesh it is not a bug
3659 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3660 f1ts.setFieldProfile(f,mm,0,pfl)
3662 f1ts=MEDFileField1TS()
3663 f=MEDCouplingFieldDouble(ON_NODES)
3664 vals=DataArrayDouble(8) ; vals.iota(1000)
3666 f.setName("anonymous") # f has no mesh it is not a bug
3667 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3668 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3670 f1ts=MEDFileField1TS()
3671 f=MEDCouplingFieldDouble(ON_CELLS)
3672 vals=DataArrayDouble(7) ; vals.iota(1000)
3674 f.setName("anonymous") # f has no mesh it is not a bug
3675 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3676 f1ts.setFieldProfile(f,mm,0,pfl)
3677 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3679 f1ts=MEDFileField1TS()
3680 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3681 vals=DataArrayDouble(27) ; vals.iota(1000)
3683 f.setName("anonymous") # f has no mesh it is not a bug
3684 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3686 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])
3687 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3688 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])
3690 f1ts.setFieldProfile(f,mm,0,pfl)
3691 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3692 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3693 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3694 vals=DataArrayDouble(27) ; vals.iota(1000)
3695 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3697 f1ts=MEDFileField1TS()
3698 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3699 vals=DataArrayDouble(25) ; vals.iota(1000)
3701 f.setName("anonymous") # f has no mesh it is not a bug
3702 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3703 f1ts.setFieldProfile(f,mm,0,pfl)
3704 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3705 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3707 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3708 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3710 f1ts=MEDFileField1TS()
3711 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3712 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3714 f1ts.setFieldProfile(f,mm,0,pfl)
3718 def testWRMeshWithNoCells(self):
3719 fname="Pyfile71.med"
3720 a=DataArrayDouble(4) ; a.iota()
3721 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3722 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3724 m.setMeshAtLevel(0,m00)
3725 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3726 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3730 m=MEDFileMesh.New(fname)
3731 self.assertEqual((),m.getNonEmptyLevels())
3732 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))
3733 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3734 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3738 def testWRQPolyg1(self):
3739 fname="Pyfile72.med"
3740 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3741 m.insertNextCell([0,2,1,3])
3742 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3744 ms = [m.deepCopy() for i in range(4)]
3745 for i,elt in enumerate(ms):
3746 elt.translate([float(i)*1.5,0.])
3748 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3749 m0.convertAllToPoly()
3751 ms = [m.deepCopy() for i in range(5)]
3752 for i,elt in enumerate(ms):
3753 elt.translate([float(i)*1.5,1.5])
3755 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3756 m1.convertAllToPoly()
3757 m1.convertLinearCellsToQuadratic()
3759 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3762 mm.setMeshAtLevel(0,m)
3763 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3764 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3765 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3766 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3771 mm_read=MEDFileUMesh(fname)
3772 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3773 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3774 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3775 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3777 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3779 arr0=DataArrayDouble(9) ; arr0.iota()
3780 arr1=DataArrayDouble(9) ; arr1.iota(100)
3781 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3782 f.setArray(arr) ; f.checkConsistencyLight()
3784 ff=MEDFileField1TS()
3785 ff.setFieldNoProfileSBT(f)
3788 ff_read=MEDFileField1TS(fname)
3789 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3790 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3794 def testLoadIfNecessaryOnFromScratchFields0(self):
3796 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3798 fname="Pyfile77.med"
3799 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3800 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3802 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3803 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3804 m.finishInsertingCells()
3806 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3807 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3811 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3812 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3814 f0.setName("myELNOField")
3815 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3816 f0.setArray(arrs[0])
3817 ff0.appendFieldNoProfileSBT(f0)
3820 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3821 f0.setArray(arrs[1])
3822 ff0.appendFieldNoProfileSBT(f0)
3825 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3826 f0.setArray(arrs[2])
3827 ff0.appendFieldNoProfileSBT(f0)
3830 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3831 f0.setArray(arrs[3])
3832 ff0.appendFieldNoProfileSBT(f0)
3834 for i,arr in enumerate(arrs):
3835 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3836 fs[0][i].loadArraysIfNecessary()
3837 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3839 fs.loadArraysIfNecessary()
3840 for i,arr in enumerate(arrs):
3841 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3843 fs[0].loadArraysIfNecessary()
3844 for i,arr in enumerate(arrs):
3845 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3850 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3851 """ 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.
3853 fname="Pyfile78.med"
3854 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)
3855 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3856 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3858 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
3859 m0.insertNextCell(NORM_TETRA4,elt)
3861 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
3862 m0.insertNextCell(NORM_PYRA5,elt)
3864 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
3865 m0.insertNextCell(NORM_PENTA6,elt)
3867 m0.checkConsistency()
3868 m1=MEDCouplingUMesh(); m1.setName("mesh")
3869 m1.setMeshDimension(2);
3870 m1.allocateCells(5);
3871 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3872 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3873 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3874 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3875 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3876 m1.setCoords(coords);
3877 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3879 m3.insertNextCell(NORM_POINT1,[2])
3880 m3.insertNextCell(NORM_POINT1,[3])
3881 m3.insertNextCell(NORM_POINT1,[4])
3882 m3.insertNextCell(NORM_POINT1,[5])
3885 mm.setMeshAtLevel(0,m0)
3886 mm.setMeshAtLevel(-1,m1)
3887 mm.setMeshAtLevel(-3,m3)
3889 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3890 mm=MEDFileMesh.New(fname)
3892 fmts=MEDFileFieldMultiTS()
3893 f1ts=MEDFileField1TS()
3894 for lev in mm.getNonEmptyLevels():
3895 for gt in mm.getGeoTypesAtLevel(lev):
3896 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3897 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3898 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3899 f.setArray(arr) ; f.setName("f0")
3900 f1ts.setFieldNoProfileSBT(f)
3903 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3904 for lev in [0,-1,-3]:
3905 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3907 fmts.pushBackTimeStep(f1ts)
3911 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3912 fs=MEDFileFields(fname)
3913 self.assertEqual(len(fs),1)
3914 self.assertEqual(len(fs[0]),1)
3916 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),'','')])])
3917 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))
3921 def testMEDFileUMeshSetName(self):
3922 """ 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.
3923 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3925 fname="Pyfile79.med"
3926 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3928 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3929 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)
3930 m0.allocateCells(5);
3931 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3932 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3933 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3934 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3935 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3936 m0.setCoords(coords);
3937 mm.setMeshAtLevel(0,m0)
3938 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3940 m2.insertNextCell(NORM_POINT1,[2])
3941 m2.insertNextCell(NORM_POINT1,[3])
3942 m2.insertNextCell(NORM_POINT1,[4])
3943 m2.insertNextCell(NORM_POINT1,[5])
3944 mm.setMeshAtLevel(-2,m2)
3945 self.assertEqual(mm.getName(),"")
3946 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3947 mm.forceComputationOfParts()
3948 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3950 self.assertEqual(mm.getName(),"abc")
3951 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3952 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3953 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3954 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3958 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3959 fileName="Pyfile80.med"
3960 m=MEDCouplingCMesh() ; m.setName("cmesh")
3961 arr=DataArrayDouble(6) ; arr.iota()
3962 m.setCoords(arr,arr)
3963 nbCells=m.getNumberOfCells()
3964 self.assertEqual(25,nbCells)
3965 f=MEDCouplingFieldDouble(ON_CELLS)
3966 f.setName("FieldOnCell") ; f.setMesh(m)
3967 arr=DataArrayDouble(nbCells) ; arr.iota()
3971 fmts=MEDFileFieldMultiTS()
3973 for i in range(nbCells):
3974 t=(float(i)+0.1,i+1,-i-2)
3976 arr2=DataArrayDouble(nbCells)
3977 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3980 f1ts=MEDFileField1TS()
3981 f1ts.setFieldNoProfileSBT(f)
3982 fmts.pushBackTimeStep(f1ts)
3984 fmts.unloadArraysWithoutDataLoss()
3985 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))
3986 fs=MEDFileFields() ; fs.pushField(fmts)
3987 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))
3988 fs.unloadArraysWithoutDataLoss()
3989 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))
3991 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))
3992 f1ts.unloadArraysWithoutDataLoss()
3993 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))
3994 mm.write(fileName,2)
3995 fs.write(fileName,0)
3996 del m,fmts,mm,f,f1ts
3998 mm=MEDFileMesh.New(fileName)
3999 fmts=MEDFileFieldMultiTS(fileName)
4000 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))
4001 fmts.unloadArraysWithoutDataLoss()
4002 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4003 fmts.loadArraysIfNecessary()
4004 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))
4006 fs=MEDFileFields(fileName)
4007 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))
4008 fs.unloadArraysWithoutDataLoss()
4009 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4010 fs.loadArraysIfNecessary()
4011 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))
4013 f1ts=MEDFileField1TS(fileName)
4014 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))
4015 f1ts.unloadArraysWithoutDataLoss()
4016 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4017 f1ts.loadArraysIfNecessary()
4018 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))
4022 def testMEDFileUMeshLoadPart1(self):
4023 """ 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
4024 memory of the returned instance.
4026 fileName="Pyfile81.med"
4027 arr=DataArrayDouble(6) ; arr.iota()
4028 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4029 m=m.buildUnstructured()
4031 m.changeSpaceDimension(3,0.)
4032 infos=["aa [b]","cc [de]","gg [klm]"]
4033 m.getCoords().setInfoOnComponents(infos)
4034 m.checkConsistency()
4036 mm.setMeshAtLevel(0,m)
4037 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4038 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4039 mm.setMeshAtLevel(-1,m1)
4040 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])
4041 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])
4042 namesCellL0=DataArrayAsciiChar(25,16)
4043 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
4044 renumM1=DataArrayInt([3,4,0,2,1])
4045 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4046 mm.setRenumFieldArr(0,renum0)
4047 mm.setFamilyFieldArr(0,famField0)
4048 mm.setNameFieldAtLevel(0,namesCellL0)
4049 mm.setRenumFieldArr(-1,renumM1)
4050 mm.setFamilyFieldArr(-1,famFieldM1)
4051 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])
4052 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])
4053 namesNodes=DataArrayAsciiChar(36,16)
4054 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
4055 mm.setRenumFieldArr(1,renum1)
4056 mm.setFamilyFieldArr(1,famField1)
4057 mm.setNameFieldAtLevel(1,namesNodes)
4058 mm.setFamilyId("Fam7",77)
4059 mm.setFamilyId("Fam8",88)
4060 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4061 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4062 mm.write(fileName,2)
4064 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4065 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4066 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])))
4067 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)
4068 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4069 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4070 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4071 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4072 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4073 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4074 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4076 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4077 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4078 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])))
4079 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)
4080 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4081 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4082 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4083 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4084 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4085 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4086 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4088 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4089 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4090 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4091 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4092 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4093 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4094 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4095 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4096 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])))
4097 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4098 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)
4099 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4100 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4101 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4102 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4106 def testMEDFileFieldsLoadPart1(self):
4107 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4109 fileName="Pyfile82.med"
4111 compos=["aa [kg]","bbb [m/s]"]
4112 arr=DataArrayDouble(6) ; arr.iota()
4113 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4114 m=m.buildUnstructured()
4116 m.changeSpaceDimension(3,0.)
4117 infos=["aa [b]","cc [de]","gg [klm]"]
4118 m.getCoords().setInfoOnComponents(infos)
4119 m.checkConsistency()
4120 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4122 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4123 arr[:,0]=list(range(25))
4124 arr[:,1]=list(range(100,125))
4126 WriteField(fileName,f,True)
4127 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4128 f.setName("FieldNode")
4129 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4130 arr[:,0]=list(range(200,236))
4131 arr[:,1]=list(range(300,336))
4133 f.checkConsistencyLight()
4134 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4137 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4139 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4140 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4143 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4145 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4147 fs[0][0].loadArrays()
4148 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4149 arr.setInfoOnComponents(compos)
4150 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4151 fs[1][0].loadArrays()
4152 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4153 arr.setInfoOnComponents(compos)
4154 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4158 def testMEDFileWithoutCells1(self):
4159 fileName="Pyfile83.med"
4160 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4161 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4165 mm.write(fileName,2)
4167 mm=MEDFileMesh.New(fileName)
4168 self.assertEqual(mm.getName(),"mesh")
4169 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4173 def testZipCoordsWithLoadPart1(self):
4174 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4176 fileName="Pyfile84.med"
4178 compos=["aa [kg]","bbb [m/s]"]
4179 arr=DataArrayDouble(6) ; arr.iota()
4180 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4181 m=m.buildUnstructured()
4183 m.changeSpaceDimension(3,0.)
4184 infos=["aa [b]","cc [de]","gg [klm]"]
4185 m.getCoords().setInfoOnComponents(infos)
4186 m.checkConsistency()
4187 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4189 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4190 arr[:,0]=list(range(25))
4191 arr[:,1]=list(range(100,125))
4193 WriteField(fileName,f,True)
4194 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4195 f.setName("FieldNode")
4196 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4197 arr[:,0]=list(range(200,236))
4198 arr[:,1]=list(range(300,336))
4200 f.checkConsistencyLight()
4201 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4204 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4206 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4207 self.assertEqual(spd.getSlice(),slice(4,6,1))
4208 spd=mm.getPartDefAtLevel(1)
4209 self.assertEqual(spd.getSlice(),slice(4,14,1))
4210 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4211 mm.zipCoords() # <- The important line is here !
4212 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4213 self.assertEqual(spd.getSlice(),slice(4,6,1))
4214 spd=mm.getPartDefAtLevel(1)
4215 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4216 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4217 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4218 fs[0][0].loadArrays()
4219 arr=DataArrayDouble([(4,104),(5,105)])
4220 arr.setInfoOnComponents(compos)
4221 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4222 fs[1][0].loadArrays()
4223 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4224 arr.setInfoOnComponents(compos)
4225 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4226 m_ref = mm[0].deepCopy()
4227 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4229 mrs = MEDFileMeshReadSelector()
4230 mrs.setNumberOfCoordsLoadSessions(2)
4231 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4233 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4234 self.assertEqual(spd.getSlice(),slice(4,6,1))
4235 spd=mm.getPartDefAtLevel(1)
4236 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4237 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4238 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4239 fs[0][0].loadArrays()
4240 arr=DataArrayDouble([(4,104),(5,105)])
4241 arr.setInfoOnComponents(compos)
4242 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4243 fs[1][0].loadArrays()
4244 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4245 arr.setInfoOnComponents(compos)
4246 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4247 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4251 def testMEDFileCMeshSetGroupsAtLevel(self):
4252 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4254 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4256 mm=MEDFileCMesh() ; mm.setMesh(m)
4257 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4258 mm.setGroupsAtLevel(0,[grp])
4259 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4263 def testMEDFileUMeshBuildExtrudedMesh1(self):
4264 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4265 fileName="Pyfile85.med"
4268 meshName3DOut="Mesh3D"
4270 d1=DataArrayInt([0,4,20,24])
4271 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4273 a=DataArrayDouble(6) ; a.iota()
4274 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4275 m=m.buildUnstructured()
4276 d1c=d1.buildComplement(m.getNumberOfCells())
4277 m=m[d1c] ; m.zipCoords()
4278 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4280 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4281 m.setName(meshName2D)
4282 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4283 e=d.deltaShiftIndex().findIdsEqual(1)
4286 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4287 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4288 mm.setGroupsAtLevel(0,[grp0])
4289 grp1=e ; grp1.setName("grp1")
4290 mm.setGroupsAtLevel(-1,[grp1])
4291 mm.write(fileName,2)
4293 a=DataArrayDouble(3) ; a.iota()
4294 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4295 tmp.setName(meshName1D)
4296 tmp.changeSpaceDimension(3)
4297 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4299 mm1D.setMeshAtLevel(0,tmp)
4300 mm1D.write(fileName,0)
4302 mm2D=MEDFileMesh.New(fileName,meshName2D)
4303 mm1D=MEDFileMesh.New(fileName,meshName1D)
4304 m1D=mm1D.getMeshAtLevel(0)
4305 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4307 self.assertEqual(mm3D.getName(),mm2D.getName())
4308 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4309 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4310 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4311 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4312 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4313 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4314 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4315 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4316 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4317 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.)])
4318 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4319 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])
4320 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4321 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])
4322 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4323 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])
4324 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4325 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])
4326 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4327 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])
4328 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4329 d=DataArrayInt(129) ; d.iota() ; d*=3
4330 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4332 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4333 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4334 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4335 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4336 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])))
4337 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])))
4338 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])))
4339 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])))
4340 mm3D.setName("MeshExtruded")
4341 mm3D.write(fileName,0)
4344 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4346 def testMEDFileUMeshPickeling1(self):
4347 outFileName="Pyfile86.med"
4348 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)
4349 c.setInfoOnComponents(["aa","bbb"])
4350 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4351 m=MEDCouplingUMesh();
4352 m.setMeshDimension(2);
4354 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4355 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4356 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4357 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4358 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4359 m.finishInsertingCells();
4361 m.checkConsistencyLight()
4362 m1=MEDCouplingUMesh.New();
4363 m1.setMeshDimension(1);
4364 m1.allocateCells(3);
4365 m1.insertNextCell(NORM_SEG2,2,[1,4])
4366 m1.insertNextCell(NORM_SEG2,2,[3,6])
4367 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4368 m1.finishInsertingCells();
4370 m1.checkConsistencyLight()
4371 m2=MEDCouplingUMesh.New();
4372 m2.setMeshDimension(0);
4373 m2.allocateCells(4);
4374 m2.insertNextCell(NORM_POINT1,1,[1])
4375 m2.insertNextCell(NORM_POINT1,1,[3])
4376 m2.insertNextCell(NORM_POINT1,1,[2])
4377 m2.insertNextCell(NORM_POINT1,1,[6])
4378 m2.finishInsertingCells();
4380 m2.checkConsistencyLight()
4382 mm=MEDFileUMesh.New()
4383 self.assertTrue(mm.getUnivNameWrStatus())
4384 mm.setName("MyFirstMEDCouplingMEDmesh")
4385 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4389 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4391 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4392 # playing with groups
4393 g1_2=DataArrayInt.New()
4394 g1_2.setValues([1,3],2,1)
4396 g2_2=DataArrayInt.New()
4397 g2_2.setValues([1,2,3],3,1)
4399 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4400 g1_1=DataArrayInt.New()
4401 g1_1.setValues([0,1,2],3,1)
4403 g2_1=DataArrayInt.New()
4404 g2_1.setValues([0,2],2,1)
4406 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4407 g1_N=DataArrayInt.New()
4408 g1_N.setValues(list(range(8)),8,1)
4410 g2_N=DataArrayInt.New()
4411 g2_N.setValues(list(range(9)),9,1)
4413 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4414 mm.createGroupOnAll(0,"GrpOnAllCell")
4415 # check content of mm
4416 t=mm.getGroupArr(0,"G1",False)
4417 self.assertTrue(g1_2.isEqual(t));
4418 t=mm.getGroupArr(0,"G2",False)
4419 self.assertTrue(g2_2.isEqual(t));
4420 t=mm.getGroupArr(-1,"G1",False)
4421 self.assertTrue(g1_1.isEqual(t));
4422 t=mm.getGroupArr(-1,"G2",False)
4423 self.assertTrue(g2_1.isEqual(t));
4424 t=mm.getGroupArr(1,"G1",False)
4425 self.assertTrue(g1_N.isEqual(t));
4426 t=mm.getGroupArr(1,"G2",False)
4427 self.assertTrue(g2_N.isEqual(t));
4428 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4429 t=mm.getGroupArr(0,"GrpOnAllCell")
4431 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4432 mm2=pickle.loads(st)
4433 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4434 self.assertEqual(mm.getAxisType(),AX_CART)
4436 mm.setAxisType(AX_CYL)
4437 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4438 mm2=pickle.loads(st)
4439 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4440 self.assertEqual(mm2.getAxisType(),AX_CYL)
4444 def testMEDFileFieldsLoadSpecificEntities1(self):
4447 fileName="Pyfile87.med"
4451 m=MEDCouplingCMesh()
4452 arr=DataArrayDouble(nbNodes) ; arr.iota()
4454 m=m.buildUnstructured()
4457 fmts=MEDFileFieldMultiTS()
4458 for i in range(nbPdt):
4459 f=MEDCouplingFieldDouble(ON_NODES)
4461 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4463 f.setName(fieldName)
4464 f.setTime(float(i),i,0)
4465 fmts.appendFieldNoProfileSBT(f)
4468 mm=MEDFileUMesh() ; mm[0]=m
4469 fmts.write(fileName,2)
4470 mm.write(fileName,0)
4472 fs=MEDFileFields(fileName,False)
4473 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4474 fs.loadArraysIfNecessary()
4475 fs2.loadArraysIfNecessary()
4476 for i in range(nbPdt):
4477 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4479 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4480 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4481 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4482 fmts=MEDFileFieldMultiTS()
4483 for i in range(nbPdt):
4484 f=MEDCouplingFieldDouble(ON_CELLS)
4486 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4488 f.setName(fieldName)
4489 f.setTime(float(i),i,0)
4490 fmts.appendFieldNoProfileSBT(f)
4492 mm=MEDFileUMesh() ; mm[0]=m3
4494 self.assertEqual(mm.getNonEmptyLevels(),())
4496 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4497 fmts.write(fileName,2)
4498 fs=MEDFileFields(fileName,False)
4499 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4500 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4501 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4502 fs.loadArraysIfNecessary()
4503 fs2.loadArraysIfNecessary()
4504 fs3.loadArraysIfNecessary()
4505 fs4.loadArraysIfNecessary()
4506 for i in range(nbPdt):
4507 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4508 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4509 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4514 def testMEDFileLotsOfTSRW1(self):
4517 fileName="Pyfile88.med"
4518 nbPdt=300 # <- perftest = 30000
4521 maxPdt=100 # <- optimum = 500
4522 m=MEDCouplingCMesh()
4523 arr=DataArrayDouble(nbNodes) ; arr.iota()
4525 m=m.buildUnstructured()
4528 nbOfField=nbPdt//maxPdt
4530 for j in range(nbOfField):
4531 fmts=MEDFileFieldMultiTS()
4532 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4533 for i in range(s.start, s.stop, s.step):
4534 f=MEDCouplingFieldDouble(ON_NODES)
4536 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4538 f.setName("%s_%d"%(fieldName,j))
4539 f.setTime(float(i),i,0)
4540 fmts.appendFieldNoProfileSBT(f)
4545 mm=MEDFileUMesh() ; mm[0]=m
4546 fs.write(fileName,2)
4547 mm.write(fileName,0)
4549 def appendInDict(d,key,val):
4556 allFields=GetAllFieldNames(fileName)
4558 pat=re.compile("([\d]+)([\s\S]+)$")
4559 for st in allFields:
4563 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4566 appendInDict(allFieldsDict,st,'')
4570 for k in allFieldsDict:
4571 if allFieldsDict[k]!=['']:
4572 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4575 for it in allFieldsDict[k]:
4576 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4581 for ii in range(nbIter):
4582 zeResu.pushBackTimeSteps(fmts2.pop())
4585 fs2.pushField(zeResu)
4587 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4591 def testMEDFileMeshRearrangeFamIds1(self):
4592 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4593 fileName="Pyfile89.med"
4594 meshName='Maillage_2'
4596 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)])
4598 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])
4599 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])
4600 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4601 m0.setConnectivity(c0,c0i)
4604 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])
4605 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])
4606 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4607 m1.setConnectivity(c1,c1i)
4610 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])
4611 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4612 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4613 mm[-2]=m2.buildUnstructured()
4615 ref0=DataArrayInt(55) ; ref0[:]=0
4616 mm.setFamilyFieldArr(0,ref0)
4617 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]))
4618 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])
4619 mm.setFamilyFieldArr(-1,ref1)
4620 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])
4621 mm.setFamilyFieldArr(-2,ref2)
4623 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4624 mm.setFamilyId(f,fid)
4625 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4626 mm.setFamiliesOnGroup(grp,fams)
4627 mm.write(fileName,2)
4629 mm=MEDFileMesh.New(fileName)
4630 grp=mm.getGroup(-1,"Groupe_1")
4631 dai=grp.computeFetchedNodeIds()
4634 mm.rearrangeFamilies() # <- the aim of the test
4635 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4636 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4637 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4638 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4639 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])))
4640 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4641 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4642 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4643 for elt,fams in allGrps:
4644 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4645 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4646 for elt,eltId in allFams:
4647 self.assertEqual(mm.getFamilyId(elt),eltId)
4651 def testNonRegrCMeshSetFieldPfl1(self):
4652 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4653 ff=MEDFileField1TS()
4656 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4660 field=MEDCouplingFieldDouble(ON_CELLS)
4662 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4663 field.setName("Field")
4664 field.checkConsistencyLight()
4665 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4666 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4667 self.assertEqual(ff.getPfls(),())
4668 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4669 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4670 del ff,mm,field,field2,pfl
4671 # same with unstructured mesh
4672 ff=MEDFileField1TS()
4675 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4678 m=m.buildUnstructured()
4680 field=MEDCouplingFieldDouble(ON_CELLS)
4682 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4683 field.setName("Field")
4684 field.checkConsistencyLight()
4685 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4686 ff.setFieldProfile(field,mm,0,pfl)
4687 self.assertEqual(ff.getPfls(),())
4688 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4689 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4693 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4695 fileName="Pyfile90.med"
4696 fileName2="Pyfile91.med"
4697 arr=DataArrayDouble(5) ; arr.iota()
4698 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4699 m=m.buildUnstructured()
4700 d=DataArrayInt([3,7,11,15])
4703 m2=m[d.buildComplement(m.getNumberOfCells())]
4704 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4705 m.changeSpaceDimension(3,0.)
4706 arr=DataArrayDouble(3) ; arr.iota()
4707 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4708 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4709 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4710 m3D=m.buildExtrudedMesh(m1D,0)
4711 m3D.sortCellsInMEDFileFrmt()
4712 m3D.setName(meshName)
4713 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4714 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4715 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4718 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4719 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4720 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4721 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4722 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4723 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4724 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4725 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4726 mm.setGroupsAtLevel(0,[vol1,vol2])
4727 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4728 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4730 mmOut1=mm.linearToQuadratic(0,0.)
4731 mmOut1.write(fileName2,2)
4732 mmOut2=mmOut1.quadraticToLinear(0.)
4733 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4737 def testMEDFileMeshAddGroup1(self):
4738 m=MEDCouplingCMesh()
4739 arrX=DataArrayDouble(9) ; arrX.iota()
4740 arrY=DataArrayDouble(4) ; arrY.iota()
4741 m.setCoords(arrX,arrY)
4745 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4747 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4749 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4751 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4753 for grp in [grp0,grp1,grp2,grp3]:
4754 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4755 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4757 for grp in [grp0,grp1,grp2,grp3]:
4758 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4759 mm.addGroup(1,grpNode)
4760 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4761 for grp in [grp0,grp1,grp2,grp3]:
4762 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4763 for grp in [grp0,grp1,grp2,grp3]:
4764 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4765 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4766 mm.normalizeFamIdsMEDFile()
4767 for grp in [grp0,grp1,grp2,grp3]:
4768 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4769 for grp in [grp0,grp1,grp2,grp3]:
4770 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4771 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4775 def testMEDFileJoint1(self):
4776 fileName="Pyfile92.med"
4777 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4778 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4782 mm.setDescription("un maillage")
4783 mm.write(fileName,2)
4784 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4785 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4786 one_step_joint=MEDFileJointOneStep()
4787 one_step_joint.pushCorrespondence(cell_correspond)
4788 one_step_joint.pushCorrespondence(node_correspond)
4789 one_joint=MEDFileJoint()
4790 one_joint.pushStep(one_step_joint)
4791 one_joint.setLocalMeshName("maa1")
4792 one_joint.setRemoteMeshName("maa1")
4793 one_joint.setDescription("joint_description")
4794 one_joint.setJointName("joint_1")
4795 one_joint.setDomainNumber(1)
4796 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4797 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4798 self.assertEqual( one_joint.getDescription(), "joint_description")
4799 self.assertEqual( one_joint.getJointName(), "joint_1")
4800 self.assertEqual( one_joint.getDomainNumber(), 1)
4801 joints=MEDFileJoints()
4802 joints.pushJoint(one_joint);
4803 joints.write(fileName,0)
4805 jointsR=MEDFileJoints(fileName,mm.getName())
4806 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4807 jR = jointsR.getJointAtPos(0)
4808 self.assertTrue( jR.isEqual( one_joint ))
4809 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4810 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4811 jointsR.destroyJointAtPos(0)
4815 def testMEDFileJoint2(self):
4816 fileNameWr="Pyfile93.med"
4817 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4818 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4822 mm.setDescription("un maillage")
4823 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4824 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4825 one_step_joint=MEDFileJointOneStep()
4826 two_step_joint=MEDFileJointOneStep()
4827 one_joint=MEDFileJoint()
4828 two_joint=MEDFileJoint()
4829 one_step_joint.pushCorrespondence(node_correspond)
4830 one_joint.pushStep(one_step_joint)
4831 two_step_joint.pushCorrespondence(cell_correspond)
4832 two_step_joint.pushCorrespondence(node_correspond)
4833 two_joint.pushStep(two_step_joint)
4834 one_joint.setLocalMeshName("maa1")
4835 one_joint.setRemoteMeshName("maa1")
4836 one_joint.setDescription("joint_description_1")
4837 one_joint.setJointName("joint_1")
4838 one_joint.setDomainNumber(1)
4839 two_joint.setLocalMeshName("maa1")
4840 two_joint.setRemoteMeshName("maa1")
4841 two_joint.setDescription("joint_description_2")
4842 two_joint.setJointName("joint_2")
4843 two_joint.setDomainNumber(2)
4844 joints=MEDFileJoints()
4845 joints.pushJoint(one_joint)
4846 joints.pushJoint(two_joint)
4847 mm.setJoints( joints )
4848 mm.write(fileNameWr,2)
4850 mm=MEDFileMesh.New(fileNameWr)
4851 self.assertEqual( mm.getNumberOfJoints(), 2)
4852 jointsR = mm.getJoints();
4853 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4854 self.assertEqual( len( jointsR ), 2 )
4855 jointR1 = jointsR[0]
4856 jointR2 = jointsR[1]
4857 self.assertFalse( jointR1 is None )
4858 self.assertFalse( jointR2 is None )
4859 self.assertTrue( jointR1.isEqual( one_joint ))
4860 self.assertTrue( jointR2.isEqual( two_joint ))
4864 def testMEDFileJoint1(self):
4865 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4866 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4867 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4868 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4869 joint1st_1=MEDFileJointOneStep()
4870 joint1st_1.pushCorrespondence(cell_correspond)
4871 joint1st_1.pushCorrespondence(node_correspond)
4872 joint1st_2=MEDFileJointOneStep()
4873 joint1st_2.pushCorrespondence(cell_correspond)
4874 joint1st_2.pushCorrespondence(node_correspond)
4875 joint1st_3=MEDFileJointOneStep()
4876 joint1st_3.pushCorrespondence(node_correspond)
4877 joint1st_3.pushCorrespondence(cell_correspond)
4878 joint1st_4=MEDFileJointOneStep()
4879 joint1st_4.pushCorrespondence(cell_correspond)
4880 joint1st_5=MEDFileJointOneStep()
4881 joint1st_5.pushCorrespondence(cell_correspon2)
4882 joint1st_6=MEDFileJointOneStep()
4883 joint1st_6.pushCorrespondence(cell_correspon3)
4884 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4885 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4886 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4887 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4888 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4889 one_joint=MEDFileJoint()
4890 one_joint.pushStep(joint1st_1)
4891 one_joint.setLocalMeshName("maa1")
4892 one_joint.setRemoteMeshName("maa2")
4893 one_joint.setDescription("joint_description")
4894 one_joint.setJointName("joint_1")
4895 one_joint.setDomainNumber(1)
4896 self.assertEqual( "maa1", one_joint.getLocalMeshName())
4897 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4898 self.assertEqual( "joint_description", one_joint.getDescription())
4899 self.assertEqual( 1, one_joint.getDomainNumber())
4900 self.assertEqual( "joint_1", one_joint.getJointName())
4903 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4905 def testMEDFileSafeCall0(self):
4906 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4907 fname="Pyfile94.med"
4908 errfname="Pyfile94.err"
4911 # first clean file if needed
4912 if os.path.exists(fname):
4915 # second : build a file from scratch
4916 m=MEDCouplingCMesh()
4917 arr=DataArrayDouble(11) ; arr.iota()
4918 m.setCoords(arr,arr)
4923 # third : change permissions to remove write access on created file
4924 os.chmod(fname, 0o444)
4925 # four : try to append data on file -> check that it raises Exception
4926 f=MEDCouplingFieldDouble(ON_CELLS)
4929 f.setArray(DataArrayDouble(100))
4930 f.getArray()[:]=100.
4931 f.checkConsistencyLight()
4932 f1ts=MEDFileField1TS()
4933 f1ts.setFieldNoProfileSBT(f)
4935 tmp=StdOutRedirect(errfname)
4936 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4939 if os.path.exists(errfname):
4945 def testUnivStatus1(self):
4946 """ Non regression test to check the effectiveness of univ write status."""
4947 fname="Pyfile95.med"
4948 arr=DataArrayDouble(10) ; arr.iota()
4949 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4950 mm=MEDFileCMesh() ; mm.setMesh(m)
4951 mm.setUnivNameWrStatus(False) # test is here
4953 mm=MEDFileCMesh(fname)
4954 self.assertEqual(mm.getUnivName(),"")
4955 mm.setUnivNameWrStatus(True)
4957 mm=MEDFileCMesh(fname)
4958 self.assertTrue(mm.getUnivName()!="")
4962 def testEmptyMesh(self):
4963 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4965 fname = "Pyfile96.med"
4966 m = MEDCouplingUMesh('toto', 2)
4967 m.setCoords(DataArrayDouble([], 0, 2))
4968 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4969 mfu = MEDFileUMesh()
4970 mfu.setMeshAtLevel(0, m)
4972 mfu2 = MEDFileUMesh(fname)
4973 self.assertEqual('toto', mfu2.getName())
4974 lvl = mfu2.getNonEmptyLevels()
4975 self.assertEqual((), lvl)
4977 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4978 def testMEDFileUMeshPickeling2(self):
4979 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4985 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4986 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4987 mesh=MEDFileUMesh() ; mesh[0]=m
4988 m1=m.computeSkin() ; mesh[-1]=m1
4990 bary1=m1.computeCellCenterOfMass()[:,2]
4991 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4992 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4993 mesh.setGroupsAtLevel(-1,[grp1,grp2])
4995 st=pickle.dumps(mesh,2)
4997 st2=pickle.dumps(mm,2)
4998 mm2=pickle.loads(st2)
4999 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5003 def testMEDFileEquivalence1(self):
5004 """ First check of equivalence implementation in MEDFileMesh"""
5005 fileName="Pyfile97.med"
5008 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)])
5009 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5010 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])
5011 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5012 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])
5013 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5014 mm.getFamilyFieldAtLevel(-1)[:]=-2
5015 mm.getFamilyFieldAtLevel(0)[:]=0
5016 mm.addFamily("HOMARD________-1",-1)
5017 mm.addFamily("HOMARD________-2",-2)
5018 mm.addFamily("HOMARD________-3",-3)
5019 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5021 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5022 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."
5023 mm.initializeEquivalences()
5024 eqs=mm.getEquivalences()
5025 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5026 eq0.setDescription(descEq)
5027 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)])
5028 eq0.setArray(-1,corr)
5029 self.assertEqual(eq0.getCell().size(),1)
5030 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5031 eq0.getCell().clear()
5032 self.assertEqual(eq0.getCell().size(),0)
5033 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5034 self.assertEqual(eq0.getCell().size(),1)
5035 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5036 mm.killEquivalences()
5037 mm.initializeEquivalences()
5038 eqs=mm.getEquivalences()
5039 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5040 eq0.setDescription(descEq)
5042 c.setArrayForType(NORM_QUAD4,corr)
5043 self.assertEqual(eq0.getCell().size(),1)
5044 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5046 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5047 self.assertEqual(mm2.getEquivalences().size(),1)
5048 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5049 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5050 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5051 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5052 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5053 mm.write(fileName,2)
5055 mm3=MEDFileMesh.New(fileName)
5056 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5060 def testMEDFileForFamiliesPlayer1(self):
5061 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5062 fileName="Pyfile98.med"
5064 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5065 arr=DataArrayDouble(4) ; arr.iota()
5066 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5067 m=m.buildUnstructured()
5070 mm.setName(meshName)
5071 mm.setFamilyId("FAMILLE_ZERO",0)
5072 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5073 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5074 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5075 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5076 mm.setFamilyFieldArr(1,d)
5077 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5078 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5079 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5080 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5081 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5082 mm.write(fileName,2)
5083 # now read such funny file !
5084 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5085 self.assertTrue(mm.isEqual(mm2,1e-16))
5086 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5087 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5088 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5092 def testCartesianizer1(self):
5093 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5095 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5096 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5097 d0=DataArrayInt(16) ; d0[:]=0
5098 d1=DataArrayInt(9) ; d1[:]=0
5099 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5100 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5101 ref0=mm.getCoords().getHiddenCppPointer()
5102 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5103 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5104 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5105 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5106 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5107 mm.setAxisType(AX_CYL) #<- important
5108 mm2=mm.cartesianize() # the trigger
5109 self.assertEqual(mm2.getAxisType(),AX_CART)
5110 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5111 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5112 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5113 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5114 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5115 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5116 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5117 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5118 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5119 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5120 self.assertEqual(mm2.getName(),mm.getName())
5121 self.assertEqual(mm2.getDescription(),mm.getDescription())
5122 self.assertEqual(mm2.getTime(),mm.getTime())
5123 self.assertEqual(mm2.getTime(),mm.getTime())
5124 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5125 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5126 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5127 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5128 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5129 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5130 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5131 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5133 mm.setAxisType(AX_CART)
5134 mm2=mm.cartesianize() # the trigger
5135 self.assertEqual(mm2.getAxisType(),AX_CART)
5136 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5137 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5138 # CurveLinearMesh non cart
5139 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5140 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5141 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5142 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5143 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5144 mm2=mm.cartesianize() # the trigger
5145 self.assertEqual(mm2.getAxisType(),AX_CART)
5146 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5147 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5148 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5149 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5150 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5151 self.assertEqual(mm2.getName(),mm.getName())
5152 self.assertEqual(mm2.getDescription(),mm.getDescription())
5153 self.assertEqual(mm2.getTime(),mm.getTime())
5154 self.assertEqual(mm2.getTime(),mm.getTime())
5155 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5156 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5157 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5158 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5159 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5160 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5161 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5162 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5163 # CurveLinearMesh cart
5164 mm.setAxisType(AX_CART)
5165 mm2=mm.cartesianize() # the trigger
5166 self.assertEqual(mm2.getAxisType(),AX_CART)
5167 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5168 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5170 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5171 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5172 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5173 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5174 mm2=mm.cartesianize() # the trigger
5175 self.assertEqual(mm2.getAxisType(),AX_CART)
5176 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5177 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5178 self.assertEqual(mm2.getName(),mm.getName())
5179 self.assertEqual(mm2.getDescription(),mm.getDescription())
5180 self.assertEqual(mm2.getTime(),mm.getTime())
5181 self.assertEqual(mm2.getTime(),mm.getTime())
5182 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5183 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5184 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5185 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5186 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5187 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5188 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5189 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5191 mm.setAxisType(AX_CART)
5192 mm2=mm.cartesianize() # the trigger
5193 self.assertEqual(mm2.getAxisType(),AX_CART)
5194 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5195 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5199 def testCheckCoherency(self):
5200 m2 = MEDCouplingUMesh("2d", 2)
5201 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5202 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5203 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5204 mum = MEDFileUMesh()
5205 mum.setMeshAtLevel(0, m2)
5206 mum.setMeshAtLevel(-1, m1)
5207 mum.checkConsistency()
5208 mum2 = mum.deepCopy()
5211 arr = DataArrayInt([2]*4)
5212 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5213 self.assertRaises(InterpKernelException, mum.checkConsistency)
5214 mum=mum2; mum2=mum.deepCopy();
5215 arr = DataArrayInt([2]*4)
5216 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5217 self.assertRaises(InterpKernelException, mum.checkConsistency)
5218 mum=mum2; mum2=mum.deepCopy();
5219 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5220 self.assertRaises(InterpKernelException, mum.checkConsistency)
5221 mum=mum2; mum2=mum.deepCopy();
5222 arr = DataArrayAsciiChar(['tutu x']*4)
5223 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5224 self.assertRaises(InterpKernelException, mum.checkConsistency)
5227 mum=mum2; mum2=mum.deepCopy();
5228 arr = DataArrayInt([2]*2)
5229 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5230 self.assertRaises(InterpKernelException, mum.checkConsistency)
5231 mum=mum2; mum2=mum.deepCopy();
5232 arr = DataArrayInt([2]*2)
5233 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5234 self.assertRaises(InterpKernelException, mum.checkConsistency)
5235 mum=mum2; mum2=mum.deepCopy();
5236 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5237 self.assertRaises(InterpKernelException, mum.checkConsistency)
5238 mum=mum2; mum2=mum.deepCopy();
5239 arr = DataArrayAsciiChar(['tutu x']*2)
5240 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5241 self.assertRaises(InterpKernelException, mum.checkConsistency)
5244 mum=mum2; mum2=mum.deepCopy();
5245 arr = DataArrayInt([2]*5)
5246 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5247 self.assertRaises(InterpKernelException, mum.checkConsistency)
5248 mum=mum2; mum2=mum.deepCopy();
5249 arr = DataArrayInt([2]*5)
5250 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5251 self.assertRaises(InterpKernelException, mum.checkConsistency)
5252 mum=mum2; mum2=mum.deepCopy();
5253 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5254 self.assertRaises(InterpKernelException, mum.checkConsistency)
5255 mum=mum2; mum2=mum.deepCopy();
5256 arr = DataArrayAsciiChar(['tutu x']*5)
5257 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5258 self.assertRaises(InterpKernelException, mum.checkConsistency)
5261 def testCheckSMESHConsistency(self):
5262 m2 = MEDCouplingUMesh("2d", 2)
5263 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5264 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5265 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5266 mum = MEDFileUMesh()
5267 mum.setMeshAtLevel(0, m2)
5268 mum.setMeshAtLevel(-1, m1)
5269 mum.checkConsistency()
5270 mum.checkSMESHConsistency()
5271 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5272 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5273 mum.setRenumFieldArr(0, n2)
5274 mum.setRenumFieldArr(-1, n1)
5275 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5276 mum.setRenumFieldArr(-1, n1+100)
5277 mum.checkSMESHConsistency()
5281 def testClearNodeAndCellNumbers(self):
5282 m2 = MEDCouplingUMesh("2d", 2)
5283 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5284 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5285 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5286 mum = MEDFileUMesh()
5287 mum.setMeshAtLevel(0, m2)
5288 mum.setMeshAtLevel(-1, m1)
5289 mum.checkConsistency()
5290 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5291 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5292 mum.setRenumFieldArr(0, n2)
5293 mum.setRenumFieldArr(-1, n1)
5294 mum.clearNodeAndCellNumbers()
5295 mum.checkSMESHConsistency()
5299 def testCMeshSetFamilyFieldArrNull(self):
5301 fname="Pyfile99.med"
5302 arrX=DataArrayDouble([0,1,2,3])
5303 arrY=DataArrayDouble([0,1,2])
5304 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5305 mm=MEDFileCMesh() ; mm.setMesh(m)
5306 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5307 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5308 mm.setFamilyFieldArr(0,famCellIds)
5309 mm.setFamilyFieldArr(1,famNodeIds)
5311 mm=MEDFileMesh.New(fname)
5312 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5313 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5314 mm.setFamilyFieldArr(0,None)#<- bug was here
5315 mm.setFamilyFieldArr(1,None)#<- bug was here
5316 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5317 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5319 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5320 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5322 mm2=MEDFileMesh.New(fname)
5323 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5324 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5328 def testAppendFieldProfileOnIntField(self):
5329 fname="Pyfile100.med"
5330 arrX=DataArrayDouble([0,1,2,3])
5331 arrY=DataArrayDouble([0,1,2])
5332 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5336 fmts=MEDFileIntFieldMultiTS()
5338 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5339 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5340 fieldName="FieldOnCell"
5341 f.setTime(1.2,1,1) ; f.setName(fieldName)
5342 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5343 fmts.appendFieldProfile(f,mm,0,pfl)
5348 mm=MEDFileMesh.New(fname)
5349 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5350 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5351 self.assertEqual(fmts.getName(),fieldName)
5352 self.assertEqual(len(fmts),1)
5354 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5355 self.assertEqual(pfltest.getName(),pflName)
5356 self.assertEqual(ftest.getName(),fieldName)
5357 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5358 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5359 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5360 self.assertEqual(ftest2.getTime(),f.getTime())
5361 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5365 def testMEDFileFieldEasyField1(self):
5366 """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."""
5367 ## Basic test on cells on top level
5368 fname="Pyfile101.med"
5371 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5372 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5374 m.insertNextCell(NORM_TRI3,[0,1,2])
5375 m.insertNextCell(NORM_TRI3,[3,4,5])
5376 m.insertNextCell(NORM_TRI3,[6,7,8])
5377 m.insertNextCell(NORM_TRI3,[9,10,11])
5378 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5379 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5382 arr0=DataArrayDouble([10,11,12,13,100,101])
5383 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5384 f.setName(fieldName) ; f.setTime(2.,6,7)
5386 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5388 arr2=arr0+1000 ; f.setArray(arr2)
5389 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5393 mm=MEDFileMesh.New(fname)
5394 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5395 ftst0=f1ts.field(mm)
5396 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5397 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5398 ftst1=f1ts.field(mm)
5399 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5400 fmts=MEDFileFieldMultiTS(fname,fieldName)
5401 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5402 ## Basic test on nodes on top level
5403 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5404 f2.setName(fieldName)
5406 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5408 mm=MEDFileMesh.New(fname)
5409 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5410 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5411 fmts=MEDFileFieldMultiTS(fname,fieldName)
5412 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5414 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)
5415 f3.setName(fieldName) ; f3.checkConsistencyLight()
5416 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5418 mm=MEDFileMesh.New(fname)
5419 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5420 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5422 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5423 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])
5424 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)
5425 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)
5426 f4.checkConsistencyLight()
5427 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5429 mm=MEDFileMesh.New(fname)
5430 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5431 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5435 def testMEDFileFieldEasyField2(self):
5436 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5437 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."""
5438 ## Basic test on cells on top level
5439 fname="Pyfile102.med"
5442 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5443 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5445 m.insertNextCell(NORM_TRI3,[0,1,2])
5446 m.insertNextCell(NORM_TRI3,[3,4,5])
5447 m.insertNextCell(NORM_TRI3,[6,7,8])
5448 m.insertNextCell(NORM_TRI3,[9,10,11])
5449 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5450 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5453 arr0=DataArrayInt32([10,11,12,13,100,101])
5454 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5455 f.setName(fieldName) ; f.setTime(2.,6,7)
5457 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5459 arr2=arr0+1000 ; f.setArray(arr2)
5460 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5464 mm=MEDFileMesh.New(fname)
5465 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5466 ftst0=f1ts.field(mm)
5467 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5468 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5469 ftst1=f1ts.field(mm)
5470 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5471 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5472 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5473 ## Basic test on nodes on top level
5474 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5475 f2.setName(fieldName)
5477 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5479 mm=MEDFileMesh.New(fname)
5480 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5481 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5482 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5483 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5485 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)
5486 f3.setName(fieldName) ; f3.checkConsistencyLight()
5487 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5489 mm=MEDFileMesh.New(fname)
5490 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5491 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5493 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5494 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])
5495 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)
5496 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)
5497 f4.checkConsistencyLight()
5498 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5500 mm=MEDFileMesh.New(fname)
5501 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5502 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5506 def testMEDFileFieldEasyField3(self):
5507 """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."""
5508 fname="Pyfile103.med"
5511 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5512 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5514 m.insertNextCell(NORM_TRI3,[0,1,2])
5515 m.insertNextCell(NORM_TRI3,[3,4,5])
5516 m.insertNextCell(NORM_TRI3,[6,7,8])
5517 m.insertNextCell(NORM_TRI3,[9,10,11])
5518 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5519 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5521 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5523 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5524 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5528 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5529 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5531 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5532 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5533 # here f1 lying on level -1 not 0 check if "field" method detect it !
5534 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5535 f1.setMesh(mm[-1]) # -1 is very important
5537 f1.checkConsistencyLight()
5539 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5541 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5542 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5544 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5545 f3.setMesh(mm[-1]) # this line is important
5546 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)
5547 f3.setName(fieldName) ; f3.checkConsistencyLight()
5548 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5550 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5551 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5553 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5554 f4.setMesh(mm[-1]) # this line is important
5555 f4.setName(fieldName)
5556 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])
5557 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)
5558 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)
5559 f4.checkConsistencyLight()
5560 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5561 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5562 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5566 def testMEDFileFieldEasyField4(self):
5567 """ Same than testMEDFileFieldEasyField3 but with integers"""
5568 fname="Pyfile104.med"
5571 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5572 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5574 m.insertNextCell(NORM_TRI3,[0,1,2])
5575 m.insertNextCell(NORM_TRI3,[3,4,5])
5576 m.insertNextCell(NORM_TRI3,[6,7,8])
5577 m.insertNextCell(NORM_TRI3,[9,10,11])
5578 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5579 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5581 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5583 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5584 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5588 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5589 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5591 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5592 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5593 # here f1 lying on level -1 not 0 check if "field" method detect it !
5594 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5595 f1.setMesh(mm[-1]) # -1 is very important
5597 f1.checkConsistencyLight()
5599 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5601 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5602 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5604 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5605 f3.setMesh(mm[-1]) # this line is important
5606 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)
5607 f3.setName(fieldName) ; f3.checkConsistencyLight()
5608 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5610 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5611 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5613 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5614 f4.setMesh(mm[-1]) # this line is important
5615 f4.setName(fieldName)
5616 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])
5617 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)
5618 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)
5619 f4.checkConsistencyLight()
5620 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5621 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5622 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5626 def testMEDFileFieldEasyField5(self):
5627 """More and more difficult now look at how profiles are managed by "field" method."""
5628 fname="Pyfile105.med"
5631 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5632 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5634 m.insertNextCell(NORM_TRI3,[0,1,2])
5635 m.insertNextCell(NORM_TRI3,[3,4,5])
5636 m.insertNextCell(NORM_TRI3,[6,7,8])
5637 m.insertNextCell(NORM_TRI3,[9,10,11])
5638 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5639 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5642 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5643 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5645 arr0=DataArrayDouble([10,11,12,13])
5646 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5647 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5648 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5651 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5652 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5653 # more complicated -> multi level
5654 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5656 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5657 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5659 mm2[0]=m0 ; mm2[-1]=m
5661 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5663 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5664 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5668 def testExtractPart1(self):
5669 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)])
5671 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5672 m0.insertNextCell(NORM_TRI3,[8,4,3])
5673 m0.insertNextCell(NORM_TRI3,[8,9,4])
5674 m0.insertNextCell(NORM_TRI3,[7,13,8])
5675 m0.insertNextCell(NORM_TRI3,[7,12,13])
5676 m0.insertNextCell(NORM_TRI3,[0,6,1])
5677 m0.insertNextCell(NORM_TRI3,[0,5,6])
5678 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5679 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5680 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5681 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5682 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5684 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5685 m1.insertNextCell(NORM_SEG2,[10,5])
5686 m1.insertNextCell(NORM_SEG2,[5,0])
5687 m1.insertNextCell(NORM_SEG2,[0,1])
5688 m1.insertNextCell(NORM_SEG2,[1,2])
5689 m1.insertNextCell(NORM_SEG2,[2,3])
5690 m1.insertNextCell(NORM_SEG2,[3,4])
5691 m1.insertNextCell(NORM_SEG2,[4,9])
5692 m1.insertNextCell(NORM_SEG2,[9,14])
5693 m1.insertNextCell(NORM_SEG2,[14,13])
5694 m1.insertNextCell(NORM_SEG2,[13,12])
5695 m1.insertNextCell(NORM_SEG2,[12,11])
5696 m1.insertNextCell(NORM_SEG2,[11,10])
5698 mm[0]=m0 ; mm[-1]=m1
5699 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5701 tab[0]=DataArrayInt([0,2,3,4,6,7])
5702 tab[-1]=DataArrayInt([2,3,4,5,9])
5704 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5708 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5711 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5712 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5713 f0.setMesh(m0) ; f0.setName(fname0)
5714 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5715 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5716 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]))
5717 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5718 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5719 fmts.pushBackTimeStep(f1ts)
5721 mmOut=mm.extractPart(tab)
5723 fsPart0=fs.extractPart(tab,mm)
5724 self.assertEqual(len(fsPart0),1)
5726 self.assertEqual(len(fmtsP),1)
5728 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5730 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5731 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5733 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5734 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5735 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5736 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5737 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5739 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5740 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5741 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5742 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5743 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5744 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5745 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5746 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5747 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5748 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5750 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5751 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5752 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5754 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5755 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5756 for i,tt in enumerate(tss):
5757 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5758 myarr=arr0_0+i*1000.
5760 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5761 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5763 fsPart1=fs.extractPart(tab,mm)
5764 self.assertEqual(len(fsPart1),1)
5766 self.assertEqual(len(fmtsP),len(tss))
5767 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5768 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5769 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5770 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5771 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5772 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5773 self.assertEqual(fPart.getTime(),list(tt))
5778 def testSymmetryPlusAggregationMFD1(self):
5779 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5780 fname1="Pyfile106_1.med"
5781 fname2="Pyfile106_2.med"
5782 fname3="Pyfile106_3.med"
5785 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5787 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5788 mm1_0.setCoords(da1)
5789 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5790 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5791 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5792 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5793 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5795 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5796 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5798 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5799 mm1_1.setCoords(da1)
5800 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5801 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5802 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5803 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5804 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5805 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5807 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5808 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5809 for i in range(1,10):
5810 mm1.setFamilyId("F%d"%i,i)
5811 mm1.setFamilyId("FAMILLE_ZERO",0)
5812 mm1.setFamilyId("H1",100)
5813 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5814 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5815 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5816 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5819 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]"])
5821 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5822 mm2_0.setCoords(da1)
5823 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5824 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5825 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5826 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5828 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5829 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5831 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5832 mm2_1.setCoords(da1)
5833 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5834 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5835 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5836 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5837 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5838 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5839 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5840 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5842 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5843 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5844 for i in range(1,12):
5845 mm2.setFamilyId("G%d"%i,i+30)
5846 mm2.setFamilyId("H1",100)
5847 mm2.setFamilyId("FAMILLE_ZERO",0)
5848 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5849 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5850 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5851 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5853 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5855 def CheckMesh(tester,mm):
5856 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]"])
5857 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5858 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])))
5859 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5860 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])))
5861 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5862 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5863 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5864 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5865 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5866 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)]
5867 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5868 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5869 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5870 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5877 infoc=["dd [W]","eee [kA]"]
5879 fmts1=MEDFileFieldMultiTS()
5880 f1ts1=MEDFileField1TS()
5881 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5882 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5883 arr1.setInfoOnComponents(infoc)
5884 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5885 f1_1.checkConsistencyLight()
5886 f1ts1.setFieldNoProfileSBT(f1_1)
5888 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5889 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5890 arr2.setInfoOnComponents(infoc)
5891 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5892 f1_2.checkConsistencyLight()
5893 f1ts1.setFieldNoProfileSBT(f1_2)
5894 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5895 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5896 arr3.setInfoOnComponents(infoc)
5897 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5898 f1_3.checkConsistencyLight()
5899 f1ts1.setFieldNoProfileSBT(f1_3)
5900 fmts1.pushBackTimeStep(f1ts1)
5902 f1ts2=f1ts1.deepCopy()
5903 f1ts2.setTime(t2[1],t2[2],t2[0])
5904 f1ts2.getUndergroundDataArray()[:]+=2000
5905 fmts1.pushBackTimeStep(f1ts2)
5907 fmts2=MEDFileFieldMultiTS()
5908 f1ts3=MEDFileField1TS()
5909 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5910 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5911 arr4.setInfoOnComponents(infoc)
5912 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5913 f2_1.checkConsistencyLight()
5914 f1ts3.setFieldNoProfileSBT(f2_1)
5915 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5916 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5917 arr5.setInfoOnComponents(infoc)
5918 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5919 f2_2.checkConsistencyLight()
5920 f1ts3.setFieldNoProfileSBT(f2_2)
5921 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5922 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5923 arr6.setInfoOnComponents(infoc)
5924 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5925 f2_3.checkConsistencyLight()
5926 f1ts3.setFieldNoProfileSBT(f2_3)
5927 fmts2.pushBackTimeStep(f1ts3)
5929 f1ts4=f1ts3.deepCopy()
5930 f1ts4.setTime(t2[1],t2[2],t2[0])
5931 f1ts4.getUndergroundDataArray()[:]+=2000
5932 fmts2.pushBackTimeStep(f1ts4)
5935 mfd1.setMeshes(MEDFileMeshes())
5936 mfd1.getMeshes().pushMesh(mm1)
5937 mfd1.setFields(MEDFileFields())
5938 mfd1.getFields().pushField(fmts1)
5941 mfd2.setMeshes(MEDFileMeshes())
5942 mfd2.getMeshes().pushMesh(mm2)
5943 mfd2.setFields(MEDFileFields())
5944 mfd2.getFields().pushField(fmts2)
5946 mfd=MEDFileData.Aggregate([mfd1,mfd2])
5947 def CheckMFD(tester,mfd):
5948 tester.assertEqual(len(mfd.getMeshes()),1)
5949 tester.assertEqual(len(mfd.getFields()),1)
5950 CheckMesh(self,mfd.getMeshes()[0])
5951 tester.assertEqual(len(mfd.getFields()[0]),2)
5952 zeF1=mfd.getFields()[0][0]
5953 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5954 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5955 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5956 ref.renumberCells(o2n)
5957 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5958 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5959 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5960 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5961 ref.renumberCells(o2n)
5962 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5963 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5964 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5965 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5966 ref.renumberCells(o2n)
5967 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5969 zeF2=mfd.getFields()[0][1]
5970 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5971 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5972 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5973 ref.renumberCells(o2n)
5974 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5975 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5976 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5977 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5978 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5979 ref.renumberCells(o2n)
5980 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5981 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5982 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5983 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5984 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5985 ref.renumberCells(o2n)
5986 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5987 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5989 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5990 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5995 def testAggregateWithGroups(self):
5996 """ Testing MEDFileUMesh::Aggretate when groups are present. """
5997 def generate(grp_name, offset):
5998 coo = DataArrayDouble([0., 1., 2.])
6000 m = MEDCouplingCMesh("toto")
6001 m.setCoords(coo, coo)
6002 m = m.buildUnstructured()
6003 mu = MEDFileUMesh.New()
6004 mu.setMeshAtLevel(0, m)
6005 g = DataArrayInt([0])
6007 g2 = DataArrayInt([1])
6008 g2.setName("common") # make a common group for all meshes being merged
6009 mu.setGroupsAtLevel(0, [g, g2])
6012 m1 = generate("A", 0.)
6013 m2 = generate("B", 2.)
6014 mm = MEDFileUMesh.Aggregate([m1,m2])
6016 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6017 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6018 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6019 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6020 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6021 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6022 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6023 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6024 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6029 def testExtrudedMesh1(self):
6030 fname="Pyfile107.med"
6031 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6032 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6033 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6036 ex2=mm.convertToExtrudedMesh()
6037 mm2=MEDFileMesh.New(fname)
6038 ex3=mm2.convertToExtrudedMesh()
6039 self.assertTrue(ex.isEqual(ex2,1e-12))
6040 self.assertTrue(ex.isEqual(ex3,1e-12))
6043 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6045 def testWriteInto30(self):
6046 fname="Pyfile108.med"
6047 fname2="Pyfile109.med"
6048 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6049 mm=MEDFileUMesh() ; mm[0]=m
6050 mm.setFamilyId("FAMILLE_ZERO",0)
6053 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6054 mm2=MEDFileUMesh(fname)
6055 self.assertTrue(mm.isEqual(mm2,1e-12))
6058 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
6061 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6063 def testPickelizationOfMEDFileObjects1(self):
6064 fname="Pyfile110.med"
6065 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)
6066 m0=MEDCouplingUMesh("Mesh",2)
6068 m0.insertNextCell(NORM_TRI3,[1,4,2])
6069 m0.insertNextCell(NORM_TRI3,[4,5,2])
6070 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6071 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6072 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6073 m0.finishInsertingCells()
6075 m1=MEDCouplingUMesh(m0.getName(),1)
6077 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6079 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6081 m1.finishInsertingCells()
6085 m.setMeshAtLevel(0,m0)
6086 m.setMeshAtLevel(-1,m1)
6088 dt=3 ; it=2 ; tim=4.5
6089 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6090 fieldNode0.setName("fieldNode0")
6091 fieldNode0.setTime(tim,dt,it)
6092 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6093 arr=DataArrayDouble([10,11,12,13,14])
6094 fieldNode0.setArray(arr)
6095 f0=MEDFileField1TS()
6096 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6097 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6098 fieldNode1.setName("fieldNode1")
6099 fieldNode1.setTime(tim,dt,it)
6100 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6101 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6102 fieldNode1.setArray(arr1)
6103 f1=MEDFileField1TS()
6104 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6106 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6107 mfd.getMeshes().pushMesh(m)
6108 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6109 mfd.getFields().pushField(fmts)
6110 # first start gently
6113 self.assertEqual(len(mfd2.getMeshes()),1)
6114 self.assertEqual(len(mfd2.getFields()),1)
6115 self.assertEqual(len(mfd2.getFields()[0]),1)
6116 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6117 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6118 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6119 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6120 # OK now end of joke -> serialization of MEDFileData
6121 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6122 mfd3=pickle.loads(st)
6124 self.assertEqual(len(mfd3.getMeshes()),1)
6125 self.assertEqual(len(mfd3.getFields()),1)
6126 self.assertEqual(len(mfd3.getFields()[0]),1)
6127 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6128 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6129 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6130 # serialization of MEDFileFields
6131 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6132 fs4=pickle.loads(st)
6133 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6134 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6135 # serialization of MEDFileFieldMulitTS
6136 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6137 fmts5=pickle.loads(st)
6138 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6139 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6140 # serialization of MEDFileField1TS
6141 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6142 f1ts6=pickle.loads(st)
6143 ff6=f1ts6.field(mfd3.getMeshes()[0])
6144 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6145 # serialization of MEDFileMeshes
6146 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6147 ms7=pickle.loads(st)
6148 self.assertEqual(len(ms7),1)
6149 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6152 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6154 def testPickelizationOfMEDFileObjects2(self):
6156 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6157 mm=MEDFileMesh.New("MEDFileMesh5.med")
6158 self.assertTrue(isinstance(mm,MEDFileCMesh))
6159 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6160 mm2=pickle.loads(st)
6161 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6162 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6164 self.internalCurveLinearMesh1() # generates Pyfile55.med
6165 mm=MEDFileMesh.New("Pyfile55.med")
6166 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6167 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6168 mm3=pickle.loads(st)
6169 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6170 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6171 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6172 # MEDFileIntFieldMultiTS
6173 fs4=MEDFileFields("Pyfile63.med")
6174 ms4=MEDFileMeshes("Pyfile63.med")
6175 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6176 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6177 fmts5=pickle.loads(st)
6178 self.assertEqual(len(fs4[0]),len(fmts5))
6179 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6180 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6181 # MEDFileIntField1TS
6182 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6183 f1ts6=pickle.loads(st)
6184 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6185 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6187 self.internalParameters1()# generates Pyfile56.med
6188 params=MEDFileParameters("Pyfile56.med")
6189 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6190 params7=pickle.loads(st)
6191 self.assertEqual(len(params),len(params7))
6192 for i in range(len(params)):
6193 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6198 def testGlobalNumOnNodes1(self):
6199 """Test global number on nodes here. Used by partitionners."""
6200 fname="Pyfile112.med"
6201 arr=DataArrayDouble(5) ; arr.iota()
6202 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6206 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6207 d=DataArrayInt([7,8,9,2,0])
6209 mm.setGlobalNumFieldAtLevel(1,d)
6210 mm.checkConsistency()
6211 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6212 mm.checkConsistency()
6213 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6214 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6216 mm2=MEDFileMesh.New(fname)
6217 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6218 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6219 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6220 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6221 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6222 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6226 def testPartialReadOfEntities1(self):
6227 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6228 fname="Pyfile113.med"
6229 arr=DataArrayDouble(5) ; arr.iota()
6230 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6237 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6238 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6240 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6241 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6243 f1ts=MEDFileField1TS()
6244 f1ts.setFieldNoProfileSBT(f1)
6245 f1ts.setFieldNoProfileSBT(f2)
6246 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6247 f1ts_2=f1ts.deepCopy()
6248 f1ts_2.getUndergroundDataArray()[:]+=2
6249 f1ts_2.setTime(3,4,6.)
6250 fmts=MEDFileFieldMultiTS()
6251 fmts.pushBackTimeStep(f1ts)
6252 fmts.pushBackTimeStep(f1ts_2)
6257 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6258 mm=MEDFileMesh.New(fname)
6259 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)
6261 self.assertEqual(len(fs),1)
6263 self.assertEqual(len(fmts),2)
6264 ff0=fmts[0] ; ff1=fmts[1]
6265 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6266 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6267 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6268 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6272 def testFloat32InMEDFileFieldStar1(self):
6273 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6274 fname="Pyfile114.med"
6275 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6276 f1=f1.convertToFloatField()
6278 mm1=MEDFileUMesh.New()
6279 mm1.setCoords(m1.getCoords())
6280 mm1.setMeshAtLevel(0,m1)
6281 mm1.setName(m1.getName())
6283 ff1=MEDFileFloatField1TS()
6284 ff1.setFieldNoProfileSBT(f1)
6285 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6286 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6287 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6289 a,b=ff1.getUndergroundDataArrayExt()
6290 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6291 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6292 ff2=MEDFileAnyTypeField1TS.New(fname)
6293 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6294 self.assertEqual(ff2.getTime(),[0,1,2.0])
6295 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6296 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6297 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6298 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6300 c=ff2.getUndergroundDataArray() ; c*=2
6301 ff2.write(fname,0) # 2 time steps in
6302 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6303 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6304 self.assertEqual(len(ffs1),2)
6305 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6306 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6307 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6308 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6309 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6310 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6311 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6312 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6313 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6314 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6315 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6317 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6320 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6321 nf1=MEDCouplingFieldFloat(ON_NODES)
6322 nf1.setTime(9.,10,-1)
6323 nf1.setMesh(f1.getMesh())
6324 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6325 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6326 nff1=MEDFileFloatField1TS.New()
6327 nff1.setFieldNoProfileSBT(nf1)
6328 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6329 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6332 nf2=MEDCouplingFieldFloat(ON_NODES)
6333 nf2.setTime(19.,20,-11)
6334 nf2.setMesh(f1.getMesh())
6335 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6336 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6337 nff2=MEDFileFloatField1TS.New()
6338 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6339 nff2.setFieldProfile(nf2,mm1,0,npfl)
6340 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6341 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6342 self.assertTrue(b.isEqual(npfl))
6343 self.assertTrue(a.isEqual(narr2,1e-7))
6345 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6346 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6347 self.assertTrue(b.isEqual(npfl))
6348 self.assertTrue(a.isEqual(narr2,1e-7))
6350 nf3=MEDCouplingFieldDouble(ON_NODES)
6351 nf3.setName("VectorFieldOnNodesDouble")
6352 nf3.setTime(29.,30,-21)
6353 nf3.setMesh(f1.getMesh())
6354 nf3.setArray(f1.getMesh().getCoords())
6355 nff3=MEDFileField1TS.New()
6356 nff3.setFieldNoProfileSBT(nf3)
6358 fs=MEDFileFields(fname)
6359 self.assertEqual(len(fs),4)
6360 ffs=[it for it in fs]
6361 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6362 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6363 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6364 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6366 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6367 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6368 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6369 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6370 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6372 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6373 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6374 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6375 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6376 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6377 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6378 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6379 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6381 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6382 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6383 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6384 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6388 def testPenta18_1(self):
6389 """EDF8478 : Test of read/write of penta18"""
6390 fname="Pyfile115.med"
6391 arr=DataArrayDouble([
6392 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6393 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6394 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6395 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6396 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6397 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6398 m=MEDCouplingUMesh("mesh",3)
6401 m.insertNextCell(NORM_PENTA18,list(range(18)))
6402 m.checkConsistencyLight()
6404 f=MEDCouplingFieldDouble(ON_NODES)
6406 f.setName("FieldOnPenta18")
6407 f.setArray(DataArrayDouble(list(range(18))))
6408 f.checkConsistencyLight()
6410 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6412 f2=MEDCouplingFieldDouble(ON_NODES)
6414 f2.setName("FieldOnPenta18Sub")
6415 f2.setArray(DataArrayDouble(list(range(18))))
6416 f2.checkConsistencyLight()
6417 WriteField(fname,f2,True)
6419 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6420 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6421 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6425 def testFieldsLinearToQuadratic(self):
6426 fname="Pyfile117.med"
6427 arr=DataArrayDouble([0,1])
6428 m=MEDCouplingCMesh();
6429 m.setCoords(arr,arr,arr)
6430 m=m.buildUnstructured()
6432 m2.translate([2,0,0])
6433 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6437 mmq=mm.linearToQuadratic(0)
6438 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6439 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6441 f=MEDCouplingFieldDouble(ON_NODES)
6445 arr=DataArrayDouble(m3.getNumberOfNodes())
6448 f1ts=MEDFileField1TS()
6449 f1ts.setFieldNoProfileSBT(f)
6450 fmts=MEDFileFieldMultiTS()
6451 fmts.pushBackTimeStep(f1ts)
6452 f1ts_2=f1ts.deepCopy()
6453 f1ts_2.setTime(3,4,5.)
6454 f1ts_2.getUndergroundDataArray()[:]*=2.
6455 fmts.pushBackTimeStep(f1ts_2)
6458 fs2=fs.linearToQuadratic(mms,mmsq)
6459 self.myTester1(fs2,mmsq[0])
6460 # A small Write/Read and test again
6461 mms.write(fname,2) ; fs.write(fname,0)
6462 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6463 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6464 fs2=fs.linearToQuadratic(mms,mmqs)
6465 self.myTester1(fs2,mmqs[0])
6468 def myTester1(self,fs2,mmq):
6469 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)
6470 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])
6471 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])
6472 fToTest=fs2[0][0].field(mmq)
6473 self.assertEqual(fToTest.getTime(),[3.,1,2])
6474 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6475 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6476 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6477 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6478 # testing 2nd timestep
6479 fToTest=fs2[0][1].field(mmq)
6480 self.assertEqual(fToTest.getTime(),[5.,3,4])
6481 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6482 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6483 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6484 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6488 def testFieldsLinearToQuadratic2(self):
6489 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6490 GeneratePyfile18(self)
6491 fname="Pyfile118.med"
6492 arr=DataArrayDouble([0,1])
6493 m=MEDCouplingCMesh();
6494 m.setCoords(arr,arr,arr)
6495 m=m.buildUnstructured()
6497 m2.translate([2,0,0])
6498 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6500 # add a point for fun
6501 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6505 mmq=mm.linearToQuadratic(0)
6506 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6507 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6509 f=MEDCouplingFieldDouble(ON_NODES)
6513 arr=DataArrayDouble(8) ; arr.iota()
6516 f1ts=MEDFileField1TS()
6517 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6518 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6519 f1ts_2=f1ts.deepCopy()
6520 f1ts_2.setTime(3,4,5.)
6521 f1ts_2.getUndergroundDataArray()[:]*=4.
6522 fmts=MEDFileFieldMultiTS()
6523 fmts.pushBackTimeStep(f1ts)
6524 fmts.pushBackTimeStep(f1ts_2)
6527 fs2=fs.linearToQuadratic(mms,mmsq)
6528 mms.write(fname,2) ; fs.write(fname,0)
6530 self.myTester2(fs2,mmq)
6532 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6533 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6534 fs2=fs.linearToQuadratic(mms,mmqs)
6535 self.myTester2(fs2,mmq)
6536 ## More vicious add single node 16
6539 mmq=mm.linearToQuadratic(0)
6540 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6541 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6543 f=MEDCouplingFieldDouble(ON_NODES)
6547 arr=DataArrayDouble(9) ; arr.iota()
6550 f1ts=MEDFileField1TS()
6551 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6552 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6553 fmts=MEDFileFieldMultiTS()
6554 fmts.pushBackTimeStep(f1ts)
6557 fs2=fs.linearToQuadratic(mms,mmsq)
6559 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")
6560 f1tsToTest=fs2[0][0]
6561 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])
6562 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6563 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6564 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6567 def myTester2(self,fs2,mmq):
6568 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")
6569 f1tsToTest=fs2[0][0]
6570 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])
6571 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6572 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6573 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6574 fToTest=fs2[0][0].field(mmq)
6575 self.assertEqual(fToTest.getTime(),[3.,1,2])
6576 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6577 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])))
6578 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))
6579 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6581 f1tsToTest=fs2[0][1]
6582 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6583 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6584 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
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(DataArrayInt([1,0,2,3,5,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19])))
6589 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))
6590 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6595 def testSetFieldProfileFlatly1(self):
6596 """ 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
6598 arr=DataArrayDouble(10) ; arr.iota()
6599 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6600 m=m.buildUnstructured()
6603 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6607 f=MEDCouplingFieldDouble(ON_CELLS)
6609 arr=DataArrayDouble(m.getNumberOfCells())
6613 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6615 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6616 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6618 f1ts=MEDFileField1TS()
6619 f1ts.setFieldProfile(f,mm,0,pfl)
6620 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6621 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6622 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6624 f1ts=MEDFileField1TS()
6625 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6626 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6627 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6628 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6629 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6630 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6634 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6635 """ Here multi level groups are created"""
6636 arr=DataArrayDouble(11) ; arr.iota()
6637 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6638 m=m.buildUnstructured()
6640 m1=m.buildDescendingConnectivity()[0]
6645 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6646 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6647 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6648 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6649 ################ ajouter un groupe sur plusieurs niveau
6651 mm.addGroup(-1,grp2)
6652 mm.addGroup(0,grp0_0)
6653 mm.addGroup(-1,grp0_1)
6654 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6655 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6656 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6657 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6658 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6659 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6660 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6661 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6662 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6663 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6664 mm.removeGroupAtLevel(0,grpName)
6665 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6666 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6667 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6668 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6669 mm.removeGroupAtLevel(-1,grpName)
6670 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6671 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6672 mm.addGroup(-1,grp0_1)
6673 mm.addGroup(0,grp0_0)
6674 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6675 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6676 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6677 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6678 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6682 def testYutaka(self):
6683 """ 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...
6684 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6686 m=MEDCouplingCMesh()
6687 arr=DataArrayDouble(4) ; arr.iota()
6688 m.setCoords(arr,arr,arr)
6689 m=m.buildUnstructured()
6692 m=m.buildUnstructured()
6693 m1=m.buildDescendingConnectivity()[0]
6699 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6701 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6703 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6705 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6706 mm.addGroup(-1,grp3)
6707 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6708 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6709 mm.addNodeGroup(grp4)
6710 mm.rearrangeFamilies()
6711 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6712 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6713 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6714 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6715 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6717 for grp in [grp0,grp1,grp2,grp3,grp4]:
6718 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6723 def testContxtMger1TS(self):
6724 fname="Pyfile119.med"
6725 coo=DataArrayDouble(1000) ; coo.iota()
6726 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6728 WriteMesh(fname,m,True)
6729 f=MEDCouplingFieldDouble(ON_CELLS)
6732 arr=DataArrayDouble(m.getNumberOfCells())
6734 f.checkConsistencyLight()
6737 f.setTime(float(i),i,0)
6738 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6741 mm=MEDFileMesh.New(fname)
6742 fmts=MEDFileFieldMultiTS(fname,False)
6743 refSize=fmts.getHeapMemorySize()
6749 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6752 def testZipFamilies1(self):
6754 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6757 arr=DataArrayDouble(10) ; arr.iota()
6758 m=MEDCouplingCMesh()
6759 m.setCoords(arr,arr)
6760 m=m.buildUnstructured()
6765 for i in range(m.getNumberOfCells()):
6766 d = DataArrayInt([i])
6767 d.setName("grp%d"%i)
6771 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6772 grp_all.setName("grp_all")
6773 mm.addGroup(0,grp_all)
6774 for i in range(m.getNumberOfCells()):
6775 mm.removeGroup("grp{}".format(i))
6778 mm.zipFamilies() # the method to test
6780 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6781 self.assertEqual(len(mm.getFamiliesNames()),1)
6782 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6785 def testZipFamilies2(self):
6787 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6790 arr=DataArrayDouble(21) ; arr.iota()
6791 m=MEDCouplingCMesh()
6793 m=m.buildUnstructured()
6798 # 1 and 3 to be merged
6799 # 2 and 5 to be merged
6800 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6801 for i in range(1,9):
6802 mm.setFamilyId("Fam_{}".format(i),-i)
6803 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6804 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6805 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6807 grp0=DataArrayInt([0,1,3,8,10,19])
6808 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6809 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6810 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6811 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6812 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6813 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6815 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6816 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6817 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6818 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6819 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6822 def testMeshConvertFromMEDFileGeoType(self):
6823 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6826 def testFieldInt64_0(self):
6828 Small basic test with I/O of field in int64.
6830 fname="Pyfile120.med"
6831 arr = DataArrayDouble([0,1])
6832 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6833 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6834 v = 1234567890123456
6835 f.setArray(DataArrayInt64([v]))
6839 f1ts = MEDFileInt64Field1TS()
6840 f1ts.setFieldNoProfileSBT(f)
6841 fmts = MEDFileInt64FieldMultiTS()
6842 fmts.pushBackTimeStep(f1ts)
6843 fs = MEDFileFields()
6848 mm = MEDFileMesh.New(fname)
6849 fs = MEDFileFields(fname)
6850 f = fs[0][0].field(mm)
6851 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6852 self.assertEqual( f.getArray().getIJ(0,0) , v )
6855 def testNonRegUMeshSubParts(self):
6857 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6859 fname = "Pyfile121.med"
6860 m0 = MEDCouplingUMesh("mesh",1)
6861 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6862 m0.setCoords(coords)
6864 m0.insertNextCell(NORM_SEG2,[1,2])
6867 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6868 m1.setCoords(m0.getCoords())
6869 m1.setNodalConnectivity(DataArrayInt([1,2]))
6870 m1.setName(m0.getName())
6872 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6873 mm.zipCoords() # <- This call changes the coords and connectivity
6876 mm = MEDFileMesh.New(fname)
6877 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6878 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6883 if __name__ == "__main__":