1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author : Anthony Geay (EDF R&D)
22 from MEDLoader import *
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
31 if sys.version_info.major < 3:
32 import cPickle as pickle
36 class StdOutRedirect(object):
37 def __init__(self,fileName):
40 self.stdoutOld=os.dup(2)
41 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42 fd2=os.dup2(self.fdOfSinkFile,2)
43 self.origPyVal=sys.stderr
44 class FlushFile(object):
53 return self.f.isatty()
57 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
61 sys.stderr=self.origPyVal
63 os.dup2(self.stdoutOld,2)
64 os.close(self.stdoutOld)
66 class MEDLoaderTest3(unittest.TestCase):
68 def testMEDMesh1(self):
69 GeneratePyfile18(self)
70 fileName="Pyfile18.med"
71 mname="ExampleOfMultiDimW"
72 medmesh=MEDFileMesh.New(fileName,mname)
73 self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75 m1_0=medmesh.getLevel0Mesh(True)
76 m1_1=ReadUMeshFromFile(fileName,mname,0)
77 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78 m2_0=medmesh.getLevelM1Mesh(True)
79 m2_1=ReadUMeshFromFile(fileName,mname,-1)
80 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
84 def testMEDMesh2(self):
85 GeneratePyfile10(self)
86 fileName="Pyfile10.med"
88 outFileName="MEDFileMesh1.med"
89 medmesh=MEDFileUMesh.New(fileName,mname)
90 self.assertEqual((0,),medmesh.getNonEmptyLevels())
91 m1_0=medmesh.getLevel0Mesh(True)
92 m1_1=ReadUMeshFromFile(fileName,mname,0)
93 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94 g1_0=medmesh.getGroup(0,"mesh2",True)
95 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97 g1_0=medmesh.getGroup(0,"mesh3",True)
98 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102 g1_1.setName(g1_0.getName())
103 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104 g1_0=medmesh.getFamily(0,"Family_-3",True)
105 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107 g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109 g1_1.setName(g1_0.getName())
110 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112 medmesh.write(outFileName,2);
113 self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114 self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115 self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116 self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117 famn=medmesh.getFamilyNameGivenId(0)
118 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
120 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
127 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
129 def testMEDMesh3(self):
130 outFileName="MEDFileMesh3.med"
131 c=DataArrayDouble.New()
132 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134 c.setValues(coords,9,2)
135 m=MEDCouplingUMesh.New();
136 m.setMeshDimension(2);
138 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143 m.finishInsertingCells();
145 m.checkConsistencyLight()
146 m1=MEDCouplingUMesh.New();
147 m1.setMeshDimension(1);
149 m1.insertNextCell(NORM_SEG2,2,[1,4])
150 m1.insertNextCell(NORM_SEG2,2,[3,6])
151 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152 m1.finishInsertingCells();
154 m1.checkConsistencyLight()
155 m2=MEDCouplingUMesh.New();
156 m2.setMeshDimension(0);
158 m2.insertNextCell(NORM_POINT1,1,[1])
159 m2.insertNextCell(NORM_POINT1,1,[3])
160 m2.insertNextCell(NORM_POINT1,1,[2])
161 m2.insertNextCell(NORM_POINT1,1,[6])
162 m2.finishInsertingCells();
164 m2.checkConsistencyLight()
166 mm=MEDFileUMesh.New()
167 self.assertTrue(mm.getUnivNameWrStatus())
168 mm.setName("MyFirstMEDCouplingMEDmesh")
169 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
171 mm.setMeshAtLevel(-1,m1);
172 mm.setMeshAtLevel(0,m);
173 mm.setMeshAtLevel(-2,m2);
174 # playing with groups
175 g1_2=DataArrayInt.New()
176 g1_2.setValues([1,3],2,1)
178 g2_2=DataArrayInt.New()
179 g2_2.setValues([1,2,3],3,1)
181 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182 g1_1=DataArrayInt.New()
183 g1_1.setValues([0,1,2],3,1)
185 g2_1=DataArrayInt.New()
186 g2_1.setValues([0,2],2,1)
188 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189 g1_N=DataArrayInt.New()
190 g1_N.setValues(list(range(8)),8,1)
192 g2_N=DataArrayInt.New()
193 g2_N.setValues(list(range(9)),9,1)
195 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196 mm.createGroupOnAll(0,"GrpOnAllCell")
197 # check content of mm
198 t=mm.getGroupArr(0,"G1",False)
199 self.assertTrue(g1_2.isEqual(t));
200 t=mm.getGroupArr(0,"G2",False)
201 self.assertTrue(g2_2.isEqual(t));
202 t=mm.getGroupArr(-1,"G1",False)
203 self.assertTrue(g1_1.isEqual(t));
204 t=mm.getGroupArr(-1,"G2",False)
205 self.assertTrue(g2_1.isEqual(t));
206 t=mm.getGroupArr(1,"G1",False)
207 self.assertTrue(g1_N.isEqual(t));
208 t=mm.getGroupArr(1,"G2",False)
209 self.assertTrue(g2_N.isEqual(t));
210 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211 t=mm.getGroupArr(0,"GrpOnAllCell")
212 self.assertTrue(t.getValues()==list(range(5)))
215 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216 mmCpy.write(outFileName,2);
218 mm=MEDFileMesh.New(outFileName)
220 self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221 self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222 self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223 mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224 self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225 self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226 self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227 lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228 self.assertEqual(3,len(lmm))
229 self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230 self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231 self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
233 self.assertTrue(mm.getUnivNameWrStatus())
234 self.assertTrue(isinstance(mm.getUnivName(),str))
235 self.assertTrue(len(mm.getUnivName())!=0)
236 mbis=mm.getMeshAtLevel(0)
237 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238 self.assertTrue(m.isEqual(mbis,1e-12));
240 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
243 # this test is the testMEDMesh3 except that permutation is dealed here
245 def testMEDMesh4(self):
246 outFileName="MEDFileMesh4.med"
247 c=DataArrayDouble.New()
248 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250 c.setValues(coords,9,2)
251 c.setInfoOnComponent(0,"abcdef [km]")
252 c.setInfoOnComponent(1,"ghij [MW]")
253 m=MEDCouplingUMesh.New();
254 m.setMeshDimension(2);
256 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261 m.finishInsertingCells();
263 m.checkConsistencyLight()
264 m1=MEDCouplingUMesh.New();
265 m1.setMeshDimension(1);
267 m1.insertNextCell(NORM_SEG2,2,[1,4])
268 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269 m1.insertNextCell(NORM_SEG2,2,[3,6])
270 m1.finishInsertingCells();
272 m1.checkConsistencyLight()
273 m2=MEDCouplingUMesh.New();
274 m2.setMeshDimension(0);
276 m2.insertNextCell(NORM_POINT1,1,[1])
277 m2.insertNextCell(NORM_POINT1,1,[3])
278 m2.insertNextCell(NORM_POINT1,1,[2])
279 m2.insertNextCell(NORM_POINT1,1,[6])
280 m2.finishInsertingCells();
282 m2.checkConsistencyLight()
284 mm=MEDFileUMesh.New()
285 mm.setName("My2ndMEDCouplingMEDmesh")
286 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
288 renumNode=DataArrayInt.New()
289 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290 mm.setRenumFieldArr(1,renumNode)
292 mm.setMeshAtLevel(-1,m1,True);
293 mm.setMeshAtLevel(0,m,True);
294 mm.setMeshAtLevel(-2,m2,True);
295 mm.removeMeshAtLevel(-2)
296 mm.setMeshAtLevel(-2,m2,True);
297 # playing with groups
298 g1_2=DataArrayInt.New()
299 g1_2.setValues([2,3],2,1)
301 g2_2=DataArrayInt.New()
302 g2_2.setValues([2,0,3],3,1)
304 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305 g1_1=DataArrayInt.New()
306 g1_1.setValues([0,2,1],3,1)
308 g2_1=DataArrayInt.New()
309 g2_1.setValues([0,2],2,1)
311 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312 g1_N=DataArrayInt.New()
313 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
315 g2_N=DataArrayInt.New()
316 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
318 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319 # check content of mm
320 t=mm.getGroupArr(0,"G1",True)
321 self.assertTrue(g1_2.isEqual(t));
322 t=mm.getGroupArr(0,"G2",True)
323 self.assertTrue(g2_2.isEqual(t));
324 t=mm.getGroupArr(-1,"G1",True)
325 self.assertTrue(g1_1.isEqual(t));
326 t=mm.getGroupArr(-1,"G2",True)
327 self.assertTrue(g2_1.isEqual(t));
328 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
330 mm.write(outFileName,2);
331 mm2=MEDFileMesh.New(outFileName)
332 res=mm.isEqual(mm2,1e-12)
333 self.assertTrue(res[0])
334 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336 mm2.keepFamIdsOnlyOnLevs([3],[-1])
337 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
340 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
343 self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345 self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346 self.assertTrue(not mm2.existsFamily("Family_-8"))
347 mm2.createGroupOnAll(-1,"GrpOnAllFace")
348 self.assertTrue(mm2.existsFamily("Family_-8"))
349 self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
352 #testing persistence of retrieved arrays
354 def testMEDMesh5(self):
355 GeneratePyfile18(self)
356 fileName="Pyfile18.med"
357 mname="ExampleOfMultiDimW"
358 medmesh=MEDFileUMesh.New(fileName,mname)
359 m1_0=medmesh.getLevel0Mesh(True)
360 da1=medmesh.getFamilyFieldAtLevel(0)
362 self.assertEqual(20,m1_0.getNumberOfCells())
363 self.assertEqual(20,da1.getNumberOfTuples())
366 def internalMEDMesh6(self):
367 outFileName="MEDFileMesh5.med"
370 m1=MEDCouplingCMesh.New();
371 da=DataArrayDouble.New()
372 da.setValues([0.,1.,2.],3,1)
373 da.setInfoOnComponent(0,"XX [mm]")
375 da=DataArrayDouble.New()
376 da.setValues([0.,1.2],2,1)
377 da.setInfoOnComponent(0,"YY [km]")
379 da=DataArrayDouble.New()
380 da.setValues([0.,1.3],2,1)
381 da.setInfoOnComponent(0,"ZZ [um]")
384 self.assertTrue(m[0].isEqual(m1,1e-12))
385 self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386 m.setName("myFirstCartMesh")
387 m.setDescription("mmmmpppppppp")
390 da=DataArrayInt.New()
391 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392 m.setFamilyFieldArr(1,da)
393 m.setFamilyId("family1",1)
394 da=m.getFamilyArr(1,"family1")
396 self.assertEqual(expected1,da.getValues())
397 self.assertTrue(m.getUnivNameWrStatus())
398 m.write(outFileName,2);
399 mm=MEDFileMesh.New(outFileName)
400 self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401 self.assertTrue(isinstance(mm,MEDFileCMesh))
402 self.assertTrue(isinstance(mm.getUnivName(),str))
403 self.assertTrue(len(mm.getUnivName())!=0)
404 self.assertTrue(m.isEqual(mm,1e-12)[0])
405 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
408 m1.setTime(tt[2],tt[0],tt[1])
409 m1.setName(m.getName())
410 m1.setTimeUnit(m.getTimeUnit())
411 m1.setDescription(m.getDescription())
412 self.assertTrue(m2.isEqual(m1,1e-12));
415 def testMEDMesh6(self):
416 self.internalMEDMesh6()
420 def testMEDMesh7(self):
421 fileName="Pyfile24.med"
422 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
424 m.setCoords(m2.getCoords())
425 m.setMeshAtLevel(0,m2)
426 m.setMeshAtLevel(-1,m1)
427 m.setMeshAtLevel(-2,m0)
428 m.setFamilyFieldArr(0,f2)
429 m.setFamilyFieldArr(-1,f1)
430 m.setFamilyFieldArr(-2,f0)
431 m.setFamilyFieldArr(1,p)
432 m.setRenumFieldArr(0,n2)
433 m.setRenumFieldArr(-1,n1)
434 m.setRenumFieldArr(-2,n0)
436 for i in range(nbOfFams):
437 m.addFamily(fns[i],fids[i])
440 for i in range(nbOfGrps):
441 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
443 m.setName(m2.getName())
444 m.setDescription(m2.getDescription())
446 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
457 self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
460 def funcToTestDelItem(self,ff):
464 #emulation of pointe.med file.
466 def testMEDField1(self):
467 TestMultiFieldShuffleRW1(self)
468 mm=MEDFileMesh.New("Pyfile17.med")
469 mm.write("Pyfile17_bis.med",2)
470 ff=MEDFileFieldMultiTS("Pyfile17.med")
471 tsExpected=[[1,2],[3,4],[5,6]]
472 self.assertEqual(3,len(ff))
473 for pos,f1ts in enumerate(ff):
474 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475 self.assertEqual(type(f1ts),MEDFileField1TS)
477 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478 self.assertEqual([3,4],ff[1].getTime()[:-1])
479 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481 ff.write("Pyfile17_bis.med",0)
483 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484 self.assertEqual([(1,2),(3,4),(5,6)],ts)
485 self.funcToTestDelItem(ff)
486 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487 self.assertEqual([(1,2)],ts)
492 def testMEDField2(self):
493 GeneratePyfile19(self)
494 mm=MEDFileMesh.New("Pyfile19.med")
495 mm.write("Pyfile19_bis.med",2)
496 ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497 ff.write("Pyfile19_bis.med",0)
498 self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
503 def testMEDField3(self):
504 GeneratePyfile13(self)
505 mm=MEDFileMesh.New("Pyfile13.med")
506 mm.write("Pyfile13_bis.med",2)
507 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508 ff.write("Pyfile13_bis.med",0)
509 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511 f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513 ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514 f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516 ff4=MEDFileField1TS.New("Pyfile13.med")
517 f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518 self.assertTrue(f.isEqual(f4,1e-12,1e-12))
523 def testMEDField4(self):
524 GeneratePyfile14(self)
525 mm=MEDFileMesh.New("Pyfile14.med")
526 mm.write("Pyfile14_bis.med",2)
527 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528 ff.write("Pyfile14_bis.med",0)
529 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531 f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
535 # MEDField get/set on pointe.med
537 def testMEDField5(self):
538 TestMultiFieldShuffleRW1(self)
539 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540 f=ff.getFieldAtLevel(ON_CELLS,0)
541 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546 # no with renumbering
547 f=ff.getFieldAtLevel(ON_CELLS,0,1)
548 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550 f=ff.getFieldAtLevel(ON_CELLS,0,3)
551 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552 f=ff.getFieldAtLevel(ON_CELLS,0,2)
553 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
558 # MEDField get/set on profiles nodes
560 def testMEDField6(self):
561 GeneratePyfile7(self)
562 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563 its=ff.getIterations()
564 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566 f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568 GeneratePyfile19(self)
569 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570 its=ff.getIterations()
571 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572 f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
578 # MEDField get/set on profiles cells
580 def testMEDField7(self):
581 GeneratePyfile12(self)
582 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583 its=ff.getIterations()
584 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585 f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
589 #first test of assignation. No profile and types sorted by type.
591 def testMEDField8(self):
593 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
595 mm1=MEDFileUMesh.New()
596 mm1.setCoords(m1.getCoords())
597 mm1.setMeshAtLevel(0,m1)
598 mm1.setName(m1.getName())
600 ff1=MEDFileField1TS.New()
601 ff1.setFieldNoProfileSBT(f1)
603 f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604 itt,orr,ti=ff1.getTime()
605 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
608 itt,orr,ti=ff1.getTime()
609 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
611 ff1.copyTimeInfoFrom(f1)
612 itt,orr,ti=ff1.getTime()
613 self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614 da,infos=ff1.getUndergroundDataArrayExt()
615 f2.getArray().setName(da.getName())#da has the same name than f2
616 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
620 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
622 mm1=MEDFileUMesh.New()
623 mm1.setCoords(m1.getCoords())
624 mm1.setMeshAtLevel(0,m1)
625 mm1.setName(m1.getName())
627 ff1=MEDFileField1TS.New()
628 ff1.setFieldNoProfileSBT(f1)
630 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
632 f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634 f1.getArray().setIJ(0,0,nv)
635 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
638 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
640 mm1=MEDFileUMesh.New()
641 mm1.setCoords(m1.getCoords())
642 mm1.setMeshAtLevel(0,m1)
643 mm1.setName(m1.getName())
645 ff1=MEDFileField1TS.New()
646 ff1.setFieldNoProfileSBT(f1)
648 f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650 da,infos=ff1.getUndergroundDataArrayExt()
651 f2.getArray().setName(da.getName())#da has the same name than f2
652 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
656 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657 f1InvalidCpy=f1.deepCopy()
658 f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659 f1InvalidCpy2=f1.deepCopy()
660 f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
662 mm1=MEDFileUMesh.New()
663 mm1.setCoords(m1.getCoords())
664 mm1.setMeshAtLevel(0,m1)
665 mm1.setName(m1.getName())
667 ff1=MEDFileField1TS.New()
668 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669 f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671 ff1.setFieldNoProfileSBT(f1)
673 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676 sbt=ff2.getFieldSplitedByType2()
677 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680 self.assertEqual(6,loc1.getNumberOfPointsInCells())
681 self.assertEqual(3,loc1.getNumberOfGaussPoints())
682 self.assertEqual(2,loc1.getDimension())
683 da,infos=ff2.getUndergroundDataArrayExt()
684 f2.getArray().setName(da.getName())#da has the same name than f2
685 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686 self.assertEqual(53,da.getNumberOfTuples())
687 self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
692 def testMEDFileData1(self):
696 m1=MEDLoaderDataForTest.build1DMesh_1()
697 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698 mmm1=MEDFileMeshMultiTS.New() ;
699 mmm1.setOneTimeStep(mm1)
700 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
705 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706 self.assertEqual(name,mmm.getName())
707 self.assertEqual(type(mmm),MEDFileUMesh)
709 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
711 ff1=MEDFileFieldMultiTS.New()
712 ff21=MEDFileFieldMultiTS.New()
713 ff22=MEDFileFieldMultiTS.New()
714 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715 f1.getArray().setInfoOnComponent(0,"power [kW]")
716 ff1.appendFieldNoProfileSBT(f1)
717 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719 ff21.appendFieldNoProfileSBT(f21)
720 f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723 ff22.appendFieldNoProfileSBT(f22)
724 fs=MEDFileFields.New()
725 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726 for name,fmts in zip(["f1","f21","f22"],fs):
727 self.assertEqual(name,fmts.getName())
731 fname2="Pyfile29_2.med"
734 d2=MEDFileData.New(fname2)
735 self.assertEqual(2,d2.getNumberOfMeshes())
736 self.assertEqual(3,d2.getNumberOfFields())
737 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741 self.assertTrue(m1.isEqual(m1bis,1e-12))
742 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
750 def testMEDField9(self):
751 # first test field profile WR. Full type but with some type missing
753 m1=MEDLoaderDataForTest.build2DMesh_3()
754 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
756 ff1=MEDFileField1TS.New()
757 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
762 ff1.setFieldProfile(f1,mm1,0,da)
763 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
767 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769 self.assertTrue(vals.isEqual(d,1e-14))
771 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773 ff2.deepCpyGlobs(ff3)
774 sbt=ff2.getFieldSplitedByType2()
775 self.assertEqual(3,sbt[0][0])#TRI3
776 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779 self.assertEqual(4,sbt[1][0])#QUAD4
780 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786 self.assertTrue(vals.isEqual(d,1e-14))
790 def testMEDField10(self):
792 m1=MEDLoaderDataForTest.build2DMesh_1()
793 m1.renumberCells([0,1,4,2,3,5],False)
794 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
796 ff1=MEDFileFieldMultiTS.New()
797 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
802 ff1.appendFieldProfile(f1,mm1,0,da)
803 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804 ff1.appendFieldProfile(f1,mm1,0,da)
808 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810 self.assertTrue(vals.isEqual(e,1e-14))
811 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813 self.assertTrue(vals.isEqual(d,1e-14))
815 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819 self.assertTrue(vals.isEqual(e,1e-14))
820 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822 self.assertTrue(vals.isEqual(d,1e-14))
825 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
827 def testMEDField11(self):
829 m1=MEDLoaderDataForTest.build2DMesh_1()
830 m1.renumberCells([0,1,4,2,3,5],False)
831 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
833 ff1=MEDFileField1TS.New()
834 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
839 ff1.setFieldProfile(f1,mm1,0,da)
840 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
843 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845 self.assertTrue(vals.isEqual(d,1e-14))
847 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850 self.assertTrue(vals.isEqual(d,1e-14))
854 def testMEDField12(self):
856 m1=MEDLoaderDataForTest.build2DMesh_1()
857 m1.renumberCells([0,1,4,2,3,5],False)
858 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
860 ff1=MEDFileFieldMultiTS.New()
861 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
866 ff1.appendFieldProfile(f1,mm1,0,da)
867 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868 ff1.appendFieldProfile(f1,mm1,0,da)
871 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873 self.assertTrue(vals.isEqual(e,1e-14))
874 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876 self.assertTrue(vals.isEqual(d,1e-14))
878 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881 self.assertTrue(vals.isEqual(e,1e-14))
882 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884 self.assertTrue(vals.isEqual(d,1e-14))
888 def testMEDField13(self):
890 m1=MEDLoaderDataForTest.build2DMesh_1()
891 m1.renumberCells([0,1,4,2,3,5],False)
893 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
896 ff1=MEDFileField1TS.New()
897 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
902 ff1.setFieldProfile(f1,mm1,0,da)
905 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907 self.assertTrue(vals.isEqual(d,1e-14))
909 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912 self.assertTrue(vals.isEqual(d,1e-14))
916 def testMEDField14(self):
918 m1=MEDLoaderDataForTest.build2DMesh_1()
919 m1.renumberCells([0,1,4,2,3,5],False)
921 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
924 ff1=MEDFileFieldMultiTS.New()
925 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
930 ff1.appendFieldProfile(f1,mm1,0,da)
931 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932 ff1.appendFieldProfile(f1,mm1,0,da)
935 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937 self.assertTrue(vals.isEqual(d,1e-14))
938 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940 self.assertTrue(vals.isEqual(e,1e-14))
941 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
943 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946 self.assertTrue(vals.isEqual(d,1e-14))
947 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949 self.assertTrue(vals.isEqual(e,1e-14))
951 # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952 # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953 # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
955 def testMEDField15(self):
957 m0=MEDLoaderDataForTest.build2DMesh_1()
958 m0.renumberCells([0,1,4,2,3,5],False)
960 m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962 ff1=MEDFileField1TS.New()
963 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
968 ff1.setFieldProfile(f1,mm1,0,da)
969 m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
972 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974 self.assertTrue(p1.isIota(5))
975 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
977 # Test for getFieldAtTopLevel method
979 def testMEDField16(self):
981 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
983 mm1=MEDFileUMesh.New()
984 mm1.setCoords(m1.getCoords())
985 mm1.setMeshAtLevel(0,m1)
986 mm1.setName(m1.getName())
987 ff1=MEDFileField1TS.New()
988 ff1.setFieldNoProfileSBT(f1)
989 m2=m1.buildDescendingConnectivity()[0]
990 m2.sortCellsInMEDFileFrmt()
991 m2.setName(m1.getName())
992 mm1.setMeshAtLevel(-1,m2)
994 f2=m2.getMeasureField(True)
995 dd=DataArrayDouble.New()
996 dd.alloc(f2.getArray().getNumberOfTuples(),3)
997 dd[:,0]=f2.getArray()
998 dd[:,1]=2*f2.getArray()
999 dd[:,2]=3*f2.getArray()
1000 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1002 f2.copyTinyStringsFrom(f1)
1003 f2.copyTinyAttrFrom(f1)
1004 ff1.setFieldNoProfileSBT(f2)
1006 # Reading Pyfile37.med
1007 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1015 fname="Pyfile38.med"
1017 ff1=MEDFileField1TS.New()
1018 ff1.setFieldNoProfileSBT(f2)
1020 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1025 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1027 def testMEDField17(self):
1028 fname="Pyfile39.med"
1029 m1=MEDLoaderDataForTest.build2DMesh_1()
1030 m1.renumberCells([0,1,4,2,3,5],False)
1031 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1033 ffs=MEDFileFields.New()
1034 ff1=MEDFileFieldMultiTS.New()
1035 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1040 ff1.appendFieldProfile(f1,mm1,0,da)
1041 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042 ff1.appendFieldProfile(f1,mm1,0,da)
1044 ffs.setFieldAtPos(0,ff1)
1048 ffsr=MEDFileFields.New(fname)
1049 ff3=ffsr.getFieldAtPos(0)
1050 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1054 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1056 def testMEDField18(self):
1057 fname="Pyfile40.med"
1058 m1=MEDLoaderDataForTest.build2DMesh_1()
1059 m1.renumberCells([0,1,4,2,3,5],False)
1060 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1062 ffs=MEDFileFields.New()
1063 ff1=MEDFileFieldMultiTS.New()
1064 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1069 ff1.appendFieldProfile(f1,mm1,0,da)
1070 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071 ff1.appendFieldProfile(f1,mm1,0,da)
1075 ffsr=MEDFileFields.New(fname)
1076 ff3=ffsr.getFieldAtPos(0)
1077 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1082 def testMEDFieldBug1(self):
1083 GeneratePyfile13(self)
1084 fname="Pyfile13.med"
1085 d=MEDFileData.New(fname)
1086 self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1090 def testMEDMesh8(self):
1091 m=MEDLoaderDataForTest.build1DMesh_1()
1092 m.convertQuadraticCellsToLinear()
1093 mm=MEDFileUMesh.New()
1094 mm.setMeshAtLevel(0,m)
1095 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098 mm.setGroupsAtLevel(0,[g1,g2],False)
1099 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100 self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101 self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102 self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103 mm.assignFamilyNameWithGroupName()
1104 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1109 mm=MEDFileUMesh.New()
1110 mm.setMeshAtLevel(0,m)
1111 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123 mm.changeFamilyId(5,6)
1124 g=mm.getGroupArr(0,"g3")
1125 self.assertTrue(g.isEqual(g3));
1126 g=mm.getGroupArr(0,"g2")
1127 self.assertTrue(g.isEqual(g2));
1128 g=mm.getGroupArr(0,"g1")
1129 self.assertTrue(g.isEqual(g1));
1132 # bug detected by gauthier
1134 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135 fname="Pyfile41.med"
1136 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1138 mm1=MEDFileUMesh.New()
1139 mm1.setCoords(m1.getCoords())
1140 mm1.setMeshAtLevel(0,m1)
1142 ff1=MEDFileField1TS.New()
1143 ff1.setFieldNoProfileSBT(f1)
1145 # writing mesh1 and field1, now creation of mesh2 and field2
1148 m2.translate([0.5,0.6,0.7])
1149 m2.setName("3DSurfMesh_2")
1150 f2.getArray()[:]*=2.
1151 f2.setName("VectorFieldOnCells2")
1152 mm2=MEDFileUMesh.New()
1153 mm2.setCoords(m2.getCoords())
1154 mm2.setMeshAtLevel(0,m2)
1156 ff2=MEDFileField1TS.New()
1157 ff2.setFieldNoProfileSBT(f2)
1160 f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162 f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1167 def testMEDLoaderMultiLevelCellField1(self):
1168 fname="Pyfile42.med"
1169 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170 m=MEDFileUMesh.New()
1171 m.setCoords(m2.getCoords())
1172 m.setMeshAtLevel(0,m2)
1173 m.setMeshAtLevel(-1,m1)
1174 m.setMeshAtLevel(-2,m0)
1178 compNames1=["comp1","comp2","comp3"]
1179 ff1=MEDFileField1TS.New()
1180 da2=DataArrayDouble.New()
1181 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1183 da2.rearrange(len(compNames1))
1184 da2.setInfoOnComponents(compNames1)
1185 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186 ff1.setFieldNoProfileSBT(f2)
1187 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188 da0=DataArrayDouble.New()
1189 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1191 da0.rearrange(len(compNames1))
1192 da0.setInfoOnComponents(compNames1)
1193 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194 ff1.setFieldNoProfileSBT(f0)
1195 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196 da1=DataArrayDouble.New()
1197 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1199 da1.rearrange(len(compNames1))
1200 da1.setInfoOnComponents(compNames1)
1201 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202 ff1.setFieldNoProfileSBT(f1)
1203 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1208 compNames2=["comp11","comp22"]
1209 ff2=MEDFileField1TS.New()
1210 da0=DataArrayDouble.New()
1211 da0.alloc(m0.getNumberOfCells()*2,1)
1214 da0.setInfoOnComponents(compNames2)
1215 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216 ff2.setFieldNoProfileSBT(f0)
1217 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218 da1=DataArrayDouble.New()
1219 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1221 da1.rearrange(len(compNames2))
1222 da1.setInfoOnComponents(compNames2)
1223 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224 ff2.setFieldNoProfileSBT(f1)
1225 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1229 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1238 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239 fname="Pyfile43.med"
1240 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241 m=MEDFileUMesh.New()
1242 m.setMeshAtLevel(0,m2)
1243 m.setMeshAtLevel(-1,m1)
1244 m.setMeshAtLevel(-2,m0)
1245 f=MEDFileField1TS.New()
1246 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247 ff.setName("NodeFieldPfl")
1248 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1250 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251 f.setFieldProfile(ff,m,-2,pfl)
1252 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261 expected1=[1.,10.,100.,2.,20.,200.]
1262 nodeCoordsWithValue1=[10.,2.5,0.]
1263 nodeCoordsWithValue2=[10.,3.75,0.]
1265 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1269 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1273 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1283 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1288 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289 f=MEDFileField1TS.New()
1290 f.setFieldProfile(ff,m,-2,pfl)
1291 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300 expected2=[2.,20.,200.,1.,10.,100.]
1302 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1306 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1309 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1319 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1324 def testBuildInnerBoundaryAlongM1Group1(self):
1325 fname="Pyfile44.med"
1326 m=MEDCouplingCMesh.New()
1327 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332 m2.setName(m.getName())
1333 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335 mm=MEDFileUMesh.New()
1336 mm.setMeshAtLevel(0,m)
1337 mm.setMeshAtLevel(-1,m2)
1338 mm.setGroupsAtLevel(-1,[grp,grp2])
1339 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340 mm.setGroupsAtLevel(1,[grpNode])
1341 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1345 self.assertEqual(30,mm.getNumberOfNodes())
1346 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1349 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350 self.assertEqual([15,16,17],nodes.getValues());
1351 self.assertEqual([7,8,9],cells.getValues());
1352 self.assertEqual([12,13,14],cells2.getValues());
1353 self.assertEqual(33,mm.getNumberOfNodes())
1354 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1366 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1375 def testBuildInnerBoundaryAlongM1Group2(self):
1376 fname="Pyfile45.med"
1377 m=MEDCouplingCMesh.New()
1378 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383 m2.setName(m.getName())
1384 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386 mm=MEDFileUMesh.New()
1387 mm.setMeshAtLevel(0,m)
1388 mm.setMeshAtLevel(-1,m2)
1389 mm.setGroupsAtLevel(-1,[grp,grp2])
1390 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391 mm.setGroupsAtLevel(1,[grpNode])
1392 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393 ref1=[4,9,8,14,15,4,10,9,15,16]
1394 ref2=[4,9,8,14,30,4,10,9,30,16]
1396 self.assertEqual(30,mm.getNumberOfNodes())
1397 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1400 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401 self.assertEqual([15],nodes.getValues());
1402 self.assertEqual([7,8],cells.getValues());
1403 self.assertEqual([12,13],cells2.getValues());
1404 self.assertEqual(31,mm.getNumberOfNodes())
1405 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1417 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1426 def testBuildInnerBoundaryAlongM1Group3(self):
1427 """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428 fname = "Pyfile73.med"
1429 m = MEDCouplingCMesh.New()
1430 m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431 m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432 m = m.buildUnstructured(); m.setName("simple")
1433 m2 = m.buildDescendingConnectivity()[0]
1434 m2.setName(m.getName())
1436 # A crack in two non connected parts of the mesh:
1437 grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1439 mm = MEDFileUMesh.New()
1440 mm.setMeshAtLevel(0,m)
1441 mm.setMeshAtLevel(-1,m2)
1442 mm.setGroupsAtLevel(-1,[grpSeg])
1443 nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444 self.assertEqual([1,13],nodes.getValues());
1445 self.assertEqual([0,6],cellsMod.getValues());
1446 self.assertEqual([1,7],cellsNotMod.getValues());
1447 self.assertEqual(17,mm.getNumberOfNodes())
1448 self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449 self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450 ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451 ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1457 refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459 self.assertTrue(delta.getMaxValue()[0]<1e-10)
1461 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463 refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1465 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1469 def testBuildInnerBoundaryAlongM1Group4(self):
1470 """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1472 coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473 0.,1., 1.,1., 2.,1., 3.,1.,
1474 0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475 conn = [3,0,4,1, 3,1,4,5,
1482 connI = DataArrayInt()
1483 connI.alloc(13, 1); connI.iota(); connI *= 4
1484 m2 = MEDCouplingUMesh("2D", 2)
1486 m2.setConnectivity(DataArrayInt(conn), connI)
1487 m2.checkConsistency()
1488 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489 grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490 grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491 mfu = MEDFileUMesh()
1492 mfu.setMeshAtLevel(0, m2)
1493 mfu.setMeshAtLevel(-1, m1)
1494 mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495 nNod = m2.getNumberOfNodes()
1496 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497 m2_bis = mfu.getMeshAtLevel(0)
1498 m2_bis.checkConsistency()
1499 m1_bis = mfu.getMeshAtLevel(-1)
1500 m1_bis.checkConsistency()
1501 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504 self.assertEqual([6,7], nodesDup.getValues())
1505 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506 self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507 self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508 self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509 self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510 self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511 ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1512 ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1513 self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1514 self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1515 self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1516 mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1517 m_bis0 = mfu.getMeshAtLevel(-1)
1518 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1519 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1522 def testBuildInnerBoundary5(self):
1523 """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1524 of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1525 coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1526 200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1527 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1528 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1529 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1530 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1531 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1532 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1533 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1534 97.16750463405486, 97.18018457127863], 46, 3)
1535 c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1536 39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1537 21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1538 14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1539 17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1540 24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1541 44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1542 44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1543 29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1544 21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1546 cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1547 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1548 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1549 m3 = MEDCouplingUMesh("3D", 3)
1551 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1552 m3.checkConsistency()
1553 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1554 grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1555 mfu = MEDFileUMesh()
1556 mfu.setMeshAtLevel(0, m3)
1557 mfu.setMeshAtLevel(-1, m2)
1558 grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1559 mfu.setGroupsAtLevel(0, [grpIds3D]) # just to check preservation of 3D group
1560 mfu.setGroupsAtLevel(-1, [grpIds])
1561 nNod = m3.getNumberOfNodes()
1562 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1563 m3_bis = mfu.getMeshAtLevel(0)
1564 m3_bis.checkConsistency()
1565 m2_bis = mfu.getMeshAtLevel(-1)
1566 m2_bis.checkConsistency()
1567 self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1568 self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1569 self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1570 self.assertEqual([3], nodesDup.getValues())
1571 self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1572 self.assertEqual(set([22]), set(cells1.getValues()))
1573 self.assertEqual(set([77]), set(cells2.getValues()))
1574 self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1575 self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1576 self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1577 m_bis0 = mfu.getMeshAtLevel(-1)
1578 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1579 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1583 def testBuildInnerBoundary6(self):
1584 """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1585 The singular point was wrongly duplicated.
1587 coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1588 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1589 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1590 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1591 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1592 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1593 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1594 c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1595 18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1596 28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1597 cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1598 m3 = MEDCouplingUMesh("3D", 3)
1600 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1601 m3.checkConsistency()
1602 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1603 grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1604 mfu = MEDFileUMesh()
1605 mfu.setMeshAtLevel(0, m3)
1606 mfu.setMeshAtLevel(-1, m2)
1607 mfu.setGroupsAtLevel(-1, [grpIds])
1608 nNod = m3.getNumberOfNodes()
1609 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1610 m3_bis = mfu.getMeshAtLevel(0)
1611 m3_bis.checkConsistency()
1612 m2_bis = mfu.getMeshAtLevel(-1)
1613 m2_bis.checkConsistency()
1614 self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1615 self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1616 self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1617 self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1618 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1619 self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1620 self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1621 self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1622 self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1623 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1624 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1628 def testBuildInnerBoundary7(self):
1629 """ 3D test where the crack has another funny shape with another singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1630 Once the crack is inserted, the cells on either side of the crack do not necessarily form a connex spread zone. This was not properly handled either.
1632 m3 = MEDCouplingUMesh('box', 3)
1633 coo = DataArrayDouble([(5,17,0),(0,17,0),(0,12,0),(5,12,0),(15,17,0),(15,12,0),(20,12,0),(20,17,0),(20,2,0),(15,2,0),(15,-3,0),(20,-3,0),(5,-3,0),(5,2,0),(0,-3,0),(0,2,0),(5,17,10),(5,17,20),(5,17,30),(5,17,40),(0,17,10),(0,17,20),(0,17,30),(0,17,40),(0,12,10),(0,12,20),(0,12,30),(0,12,40),(5,12,10),(5,12,20),(5,12,30),(5,12,40),(15,17,10),(15,17,20),(15,17,30),(15,17,40),(15,12,10),(15,12,20),(15,12,30),(15,12,40),(20,12,10),(20,12,20),(20,12,30),(20,12,40),(20,17,10),(20,17,20),(20,17,30),(20,17,40),(20,2,10),(20,2,20),(20,2,30),(20,2,40),(15,2,10),(15,2,20),(15,2,30),(15,2,40),(15,-3,10),(15,-3,20),(15,-3,30),(15,-3,40),(20,-3,10),(20,-3,20),(20,-3,30),(20,-3,40),
1634 (5,-3,10),(5,-3,20),(5,-3,30),(5,-3,40),(5,2,10),(5,2,20),(5,2,30),(5,2,40),(0,-3,10),(0,-3,20),(0,-3,30),(0,-3,40),(0,2,10),(0,2,20),(0,2,30),(0,2,40),(20,8,0),(0,8,0),(20,8,10),(20,8,20),(20,8,30),(20,8,40),(15,8,30),(15,8,40),(5,8,30),(5,8,40),(0,8,10),(0,8,20),(0,8,30),(0,8,40)])
1636 c = DataArrayInt([31, 0, 3, 2, 1, -1, 16, 20, 24, 28, -1, 0, 16, 28, 3, -1, 3, 28, 24, 2, -1, 2, 24, 20, 1, -1, 1, 20, 16, 0, 31, 16, 28, 24, 20, -1, 17, 21, 25, 29, -1, 16, 17, 29, 28, -1, 28, 29, 25, 24, -1, 24, 25, 21, 20, -1, 20, 21, 17, 16, 31, 17, 29, 25, 21, -1, 18, 22, 26, 30, -1, 17, 18, 30, 29, -1, 29, 30, 26, 25, -1, 25, 26, 22, 21, -1, 21, 22, 18, 17, 31, 18, 30, 26, 22, -1, 19, 23, 27, 31, -1, 18, 19, 31, 30, -1, 30, 31, 27, 26, -1, 26, 27, 23, 22, -1, 22, 23, 19, 18, 31, 4, 5, 3, 0, -1, 32, 16, 28, 36, -1, 4, 32, 36, 5, -1, 5, 36, 28, 3, -1, 3, 28, 16, 0, -1, 0, 16, 32, 4, 31, 32, 36, 28, 16, -1, 33, 17, 29, 37, -1, 32, 33, 37,
1637 36, -1, 36, 37, 29, 28, -1, 28, 29, 17, 16, -1, 16, 17, 33, 32, 31, 33, 37, 29, 17, -1, 34, 18, 30, 38, -1, 33, 34, 38, 37, -1, 37, 38, 30, 29, -1, 29, 30, 18, 17, -1, 17, 18, 34, 33, 31, 34, 38, 30, 18, -1, 35, 19, 31, 39, -1, 34, 35, 39, 38, -1, 38, 39, 31, 30, -1, 30, 31, 19, 18, -1, 18, 19, 35, 34, 31, 6, 5, 4, 7, -1, 40, 44, 32, 36, -1, 6, 40, 36, 5, -1, 5, 36, 32, 4, -1, 4, 32, 44, 7, -1, 7, 44, 40, 6, 31, 40, 36, 32, 44, -1, 41, 45, 33, 37, -1, 40, 41, 37, 36, -1, 36, 37, 33, 32, -1, 32, 33, 45, 44, -1, 44, 45, 41, 40, 31, 41, 37, 33, 45, -1, 42, 46, 34, 38, -1, 41, 42, 38, 37, -1, 37, 38, 34, 33, -1, 33, 34, 46, 45, -1, 45, 46, 42, 41, 31,
1638 42, 38, 34, 46, -1, 43, 47, 35, 39, -1, 42, 43, 39, 38, -1, 38, 39, 35, 34, -1, 34, 35, 47, 46, -1, 46, 47, 43, 42, 31, 80, 9, 5, 6, -1, 82, 40, 36, 52, -1, 80, 82, 52, 9, -1, 9, 52, 36, 5, -1, 5, 36, 40, 6, -1, 6, 40, 82, 80, 31, 82, 52, 36, 40, -1, 83, 41, 37, 53, -1, 82, 83, 53, 52, -1, 52, 53, 37, 36, -1, 36, 37, 41, 40, -1, 40, 41, 83, 82, 31, 83, 53, 37, 41, -1, 84, 42, 38, 86, -1, 83, 84, 86, 53, -1, 53, 86, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 84, 83, 31, 84, 86, 38, 42, -1, 85, 43, 39, 87, -1, 84, 85, 87, 86, -1, 86, 87, 39, 38, -1, 38, 39, 43, 42, -1, 42, 43, 85, 84, 31, 10, 9, 8, 11, -1, 56, 60, 48, 52, -1, 10, 56, 52, 9, -1, 9, 52,
1639 48, 8, -1, 8, 48, 60, 11, -1, 11, 60, 56, 10, 31, 56, 52,
1640 48, 60, -1, 57, 61, 49, 53, -1, 56, 57, 53, 52, -1, 52, 53, 49, 48, -1, 48, 49, 61, 60, -1, 60, 61, 57, 56, 31, 57, 53, 49, 61, -1, 58, 62, 50, 54, -1, 57, 58, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, 61, 62, 58, 57, 31, 58, 54, 50, 62, -1, 59, 63, 51, 55, -1, 58, 59, 55, 54, -1, 54, 55, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 59, 58, 31, 12, 13, 9, 10, -1, 64, 56, 52, 68, -1, 12, 64, 68, 13, -1, 13, 68, 52, 9, -1, 9, 52, 56, 10, -1, 10, 56, 64, 12, 31, 64, 68, 52, 56, -1, 65, 57, 53, 69, -1, 64, 65, 69, 68, -1, 68, 69, 53, 52, -1, 52, 53, 57, 56, -1, 56, 57, 65, 64, 31, 65, 69, 53, 57, -1, 66, 58, 54, 70, -1, 65, 66, 70, 69, -1, 69, 70,
1641 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 66, 65, 31, 66, 70, 54, 58, -1, 67, 59, 55, 71, -1, 66, 67, 71, 70, -1, 70, 71, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 67, 66, 31, 14, 15, 13, 12, -1, 72, 64, 68, 76, -1, 14, 72, 76, 15, -1, 15, 76, 68, 13, -1, 13, 68, 64, 12, -1, 12, 64, 72, 14, 31, 72, 76, 68, 64, -1, 73, 65, 69, 77, -1, 72, 73, 77, 76, -1, 76, 77, 69, 68, -1, 68, 69, 65, 64, -1, 64, 65, 73, 72, 31, 73, 77, 69, 65, -1, 74, 66, 70, 78, -1, 73, 74, 78, 77, -1, 77, 78, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 74, 73, 31, 74, 78, 70, 66, -1, 75, 67, 71, 79, -1, 74, 75, 79, 78, -1, 78, 79, 71, 70, -1, 70, 71, 67, 66, -1,
1642 66, 67, 75, 74, 31, 2, 3, 13, 81, -1, 24, 90, 68, 28, -1, 2, 24, 28, 3, -1, 3, 28, 68, 13, -1, 13, 68, 90, 81, -1, 81, 90, 24, 2, 31, 24, 28, 68, 90, -1, 25, 91, 69, 29, -1, 24, 25, 29, 28, -1, 28, 29, 69, 68, -1, 68, 69, 91, 90, -1, 90, 91, 25, 24, 31, 25, 29, 69, 91, -1, 26, 92, 88, 30, -1, 25, 26, 30, 29, -1, 29, 30, 88, 69, -1, 69, 88, 92, 91, -1, 91, 92, 26, 25, 31, 26, 30, 88, 92, -1, 27, 93, 89, 31, -1, 26, 27, 31, 30, -1, 30, 31, 89, 88, -1, 88, 89, 93, 92, -1, 92, 93, 27, 26, 31, 13, 3, 5, 9, -1, 68, 52, 36, 28, -1, 13, 68, 28, 3, -1, 3, 28, 36, 5, -1, 5, 36, 52, 9, -1, 9, 52, 68, 13, 31, 68, 28, 36, 52, -1, 69, 53, 37, 29, -1, 68, 69, 29,
1643 28, -1, 28, 29, 37, 36, -1, 36, 37, 53, 52, -1, 52, 53, 69, 68, 31, 69, 29, 37, 53, -1, 88, 86, 38, 30, -1, 69, 88, 30, 29, -1, 29, 30, 38, 37, -1, 37, 38, 86, 53, -1, 53, 86, 88, 69, 31, 88, 30, 38, 86, -1, 89, 87, 39, 31, -1, 88, 89, 31, 30, -1, 30, 31, 39, 38, -1, 38, 39, 87, 86, -1, 86, 87, 89, 88])
1644 cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080])
1645 m3.setConnectivity(c, cI)
1646 m3.checkConsistency()
1647 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1648 grpIds = DataArrayInt([2,7,12,17,95,99,103,107,129,133,137,141]); grpIds.setName("group")
1649 mfu = MEDFileUMesh()
1650 mfu.setMeshAtLevel(0, m3)
1651 mfu.setMeshAtLevel(-1, m2)
1652 mfu.setGroupsAtLevel(-1, [grpIds])
1653 nNod = m3.getNumberOfNodes()
1654 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1655 m3_bis = mfu.getMeshAtLevel(0)
1656 m3_bis.checkConsistency()
1657 m2_bis = mfu.getMeshAtLevel(-1)
1658 m2_bis.checkConsistency()
1659 self.assertEqual(nNod+22, mfu.getNumberOfNodes())
1660 self.assertEqual(nNod+22, m3_bis.getNumberOfNodes())
1661 self.assertEqual(nNod+22, m2_bis.getNumberOfNodes())
1662 self.assertEqual([0, 3, 12, 13, 16, 17, 18, 19, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89], nodesDup.getValues())
1663 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1664 self.assertEqual(set([0, 1, 2, 3, 24, 25, 26, 27, 28, 29, 30, 31]), set(cells1.getValues()))
1665 self.assertEqual(set([4, 5, 6, 7, 20, 21, 22, 23, 32, 33, 34, 35]), set(cells2.getValues()))
1666 self.assertEqual([2, 7, 12, 17, 95, 99, 103, 107, 129, 133, 137, 141],mfu.getGroupArr(-1,"group").getValues())
1667 self.assertEqual([151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1668 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1669 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1672 def testBuildInnerBoundary8(self):
1673 """ 3D test where the crack leaves 'naked' cells. If we call a 'close-to-crack cell' a cell which shares a face with the M1 group,
1674 a 'naked cell' is a cell that has some node duplicated, but which do not share any face with a 'close-to-crack cell'. In this case
1675 it is tricky to decide whether this cell should be renumbered or not ...
1676 Warning: on the mesh below some points have already been doubled by a previous cut.
1678 m3 = MEDCouplingUMesh('box', 3)
1679 coo = DataArrayDouble([(0,15,0),(0,5,0),(3,5,0),(5,5,0),(5,15,0),(5,20,0),(0,20,0),(15,20,0),(15,15,0),(20,15,0),(20,20,0),(20,5,0),(15,5,0),(15,0,0),(20,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),
1680 (3,3,0),(0,0,0),(0,3,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(0,5,10),(0,5,20),(0,5,30),(0,5,40),(3,5,10),(3,5,20),(3,5,30),(3,5,40),(5,5,10),(5,5,20),(5,5,30),(5,5,40),(5,15,10),(5,15,20),(5,15,30),
1681 (5,15,40),(5,20,10),(5,20,20),(5,20,30),(5,20,40),(0,20,10),(0,20,20),(0,20,30),(0,20,40),(15,20,10),(15,20,20),(15,20,30),(15,20,40),(15,15,10),(15,15,20),(15,15,30),(15,15,40),(20,15,10),(20,15,20),
1682 (20,15,30),(20,15,40),(20,20,10),(20,20,20),(20,20,30),(20,20,40),(20,5,10),(20,5,20),(20,5,30),(20,5,40),(15,5,10),(15,5,20),(15,5,30),(15,5,40),(15,0,10),(15,0,20),(15,0,30),(15,0,40),(20,0,10),
1683 (20,0,20),(20,0,30),(20,0,40),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,-1.60551e-25,30),(5,-1.60551e-25,40),(5,3,10),(5,3,20),(5,3,30),(5,3,40),(3,0,10),(3,0,20),(3,0,30),(3,0,40),(3,3,10),(3,3,20),
1684 (3,3,30),(3,3,40),(0,0,10),(0,0,20),(0,0,30),(0,0,40),(0,3,10),(0,3,20),(0,3,30),(0,3,40),(0,9,0),(3,9,0),(20,9,0),(0,9,10),(0,9,20),(0,9,30),(0,9,40),(3,9,10),(3,9,20),(3,9,30),(3,9,40),(5,9,30),
1685 (5,9,40),(20,9,10),(20,9,20),(20,9,30),(20,9,40),(15,9,30),(15,9,40),(0,15,0),(20,15,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(5,15,30),(5,15,40),(15,15,30),(15,15,40),(20,15,10),(20,15,20),(20,15,30),
1688 c = DataArrayInt([31, 5, 4, 124, 6, -1, 41, 45, 126, 37, -1, 5, 41, 37, 4, -1, 4, 37, 126, 124, -1, 124, 126, 45, 6, -1, 6, 45, 41, 5, 31, 41, 37, 126, 45, -1, 42, 46, 127, 38, -1, 41, 42, 38, 37, -1, 37, 38, 127, 126, -1, 126, 127, 46, 45, -1, 45, 46, 42, 41, 31, 42, 38, 127, 46, -1, 43, 47, 128, 130, -1, 42, 43, 130, 38, -1, 38, 130, 128, 127, -1, 127, 128, 47, 46, -1, 46, 47, 43, 42, 31, 43, 130, 128, 47,
1689 -1, 44, 48, 129, 131, -1, 43, 44, 131, 130, -1, 130, 131, 129, 128, -1, 128, 129, 48, 47, -1, 47, 48, 44, 43, 31, 7, 8, 4, 5, -1, 49, 41, 37, 53, -1, 7, 49, 53, 8, -1, 8, 53, 37, 4, -1, 4, 37, 41, 5, -1, 5, 41, 49, 7, 31, 49, 53, 37, 41, -1, 50, 42, 38, 54, -1, 49, 50, 54, 53, -1, 53, 54, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 50, 49, 31, 50, 54, 38, 42, -1, 51, 43, 130, 132, -1, 50, 51, 132, 54, -1, 54, 132,
1690 130, 38, -1, 38, 130, 43, 42, -1, 42, 43, 51, 50, 31, 51, 132, 130, 43, -1, 52, 44, 131, 133, -1, 51, 52, 133, 132, -1, 132, 133, 131, 130, -1, 130, 131, 44, 43, -1, 43, 44, 52, 51, 31, 125, 8, 7, 10, -1, 134, 61, 49, 53, -1, 125, 134, 53, 8, -1, 8, 53, 49, 7, -1, 7, 49, 61, 10, -1, 10, 61, 134, 125, 31, 134, 53, 49, 61, -1, 135, 62, 50, 54, -1, 134, 135, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1,
1691 61, 62, 135, 134, 31, 135, 54, 50, 62, -1, 136, 63, 51, 132, -1, 135, 136, 132, 54, -1, 54, 132, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 136, 135, 31, 136, 132, 51, 63, -1, 137, 64, 52, 133, -1, 136, 137, 133, 132, -1, 132, 133, 52, 51, -1, 51, 52, 64, 63, -1, 63, 64, 137, 136, 31, 107, 12, 8, 9, -1, 118, 57, 53, 69, -1, 107, 118, 69, 12, -1, 12, 69, 53, 8, -1, 8, 53, 57, 9, -1, 9, 57, 118, 107, 31, 118, 69,
1692 53, 57, -1, 119, 58, 54, 70, -1, 118, 119, 70, 69, -1, 69, 70, 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 119, 118, 31, 119, 70, 54, 58, -1, 120, 59, 55, 122, -1, 119, 120, 122, 70, -1, 70, 122, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 120, 119, 31, 120, 122, 55, 59, -1, 121, 60, 56, 123, -1, 120, 121, 123, 122, -1, 122, 123, 56, 55, -1, 55, 56, 60, 59, -1, 59, 60, 121, 120, 31, 13, 12, 11, 14, -1, 73, 77, 65, 69,
1693 -1, 13, 73, 69, 12, -1, 12, 69, 65, 11, -1, 11, 65, 77, 14, -1, 14, 77, 73, 13, 31, 73, 69, 65, 77, -1, 74, 78, 66, 70, -1, 73, 74, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 78, 77, -1, 77, 78, 74, 73, 31, 74, 70, 66, 78, -1, 75, 79, 67, 71, -1, 74, 75, 71, 70, -1, 70, 71, 67, 66, -1, 66, 67, 79, 78, -1, 78, 79, 75, 74, 31, 75, 71, 67, 79, -1, 76, 80, 68, 72, -1, 75, 76, 72, 71, -1, 71, 72, 68, 67, -1, 67, 68, 80,
1694 79, -1, 79, 80, 76, 75, 31, 17, 18, 16, 15, -1, 89, 81, 85, 93, -1, 17, 89, 93, 18, -1, 18, 93, 85, 16, -1, 16, 85, 81, 15, -1, 15, 81, 89, 17, 31, 89, 93, 85, 81, -1, 90, 82, 86, 94, -1, 89, 90, 94, 93, -1, 93, 94, 86, 85, -1, 85, 86, 82, 81, -1, 81, 82, 90, 89, 31, 90, 94, 86, 82, -1, 91, 83, 87, 95, -1, 90, 91, 95, 94, -1, 94, 95, 87, 86, -1, 86, 87, 83, 82, -1, 82, 83, 91, 90, 31, 91, 95, 87, 83, -1, 92, 84,
1695 88, 96, -1, 91, 92, 96, 95, -1, 95, 96, 88, 87, -1, 87, 88, 84, 83, -1, 83, 84, 92, 91, 31, 19, 20, 18, 17, -1, 97, 89, 93, 101, -1, 19, 97, 101, 20, -1, 20, 101, 93, 18, -1, 18, 93, 89, 17, -1, 17, 89, 97, 19, 31, 97, 101, 93, 89, -1, 98, 90, 94, 102, -1, 97, 98, 102, 101, -1, 101, 102, 94, 93, -1, 93, 94, 90, 89, -1, 89, 90, 98, 97, 31, 98, 102, 94, 90, -1, 99, 91, 95, 103, -1, 98, 99, 103, 102, -1, 102, 103,
1696 95, 94, -1, 94, 95, 91, 90, -1, 90, 91, 99, 98, 31, 99, 103, 95, 91, -1, 100, 92, 96, 104, -1, 99, 100, 104, 103, -1, 103, 104, 96, 95, -1, 95, 96, 92, 91, -1, 91, 92, 100, 99, 31, 1, 2, 18, 20, -1, 25, 101, 93, 29, -1, 1, 25, 29, 2, -1, 2, 29, 93, 18, -1, 18, 93, 101, 20, -1, 20, 101, 25, 1, 31, 25, 29, 93, 101, -1, 26, 102, 94, 30, -1, 25, 26, 30, 29, -1, 29, 30, 94, 93, -1, 93, 94, 102, 101, -1, 101, 102,
1697 26, 25, 31, 26, 30, 94, 102, -1, 27, 103, 95, 31, -1, 26, 27, 31, 30, -1, 30, 31, 95, 94, -1, 94, 95, 103, 102, -1, 102, 103, 27, 26, 31, 27, 31, 95, 103, -1, 28, 104, 96, 32, -1, 27, 28, 32, 31, -1, 31, 32, 96, 95, -1, 95, 96, 104, 103, -1, 103, 104, 28, 27, 31, 3, 4, 8, 12, -1, 33, 69, 53, 37, -1, 3, 33, 37, 4, -1, 4, 37, 53, 8, -1, 8, 53, 69, 12, -1, 12, 69, 33, 3, 31, 33, 37, 53, 69, -1, 34, 70, 54, 38, -1,
1698 33, 34, 38, 37, -1, 37, 38, 54, 53, -1, 53, 54, 70, 69, -1, 69, 70, 34, 33, 31, 34, 38, 54, 70, -1, 116, 122, 55, 39, -1, 34, 116, 39, 38, -1, 38, 39, 55, 54, -1, 54, 55, 122, 70, -1, 70, 122, 116, 34, 31, 116, 39, 55, 122, -1, 117, 123, 56, 40, -1, 116, 117, 40, 39, -1, 39, 40, 56, 55, -1, 55, 56, 123, 122, -1, 122, 123, 117, 116, 31, 16, 18, 2, 3, -1, 85, 33, 29, 93, -1, 16, 85, 93, 18, -1, 18, 93, 29, 2,
1699 -1, 2, 29, 33, 3, -1, 3, 33, 85, 16, 31, 85, 93, 29, 33, -1, 86, 34, 30, 94, -1, 85, 86, 94, 93, -1, 93, 94, 30, 29, -1, 29, 30, 34, 33, -1, 33, 34, 86, 85, 31, 86, 94, 30, 34, -1, 87, 35, 31, 95, -1, 86, 87, 95, 94, -1, 94, 95, 31, 30, -1, 30, 31, 35, 34, -1, 34, 35, 87, 86, 31, 87, 95, 31, 35, -1, 88, 36, 32, 96, -1, 87, 88, 96, 95, -1, 95, 96, 32, 31, -1, 31, 32, 36, 35, -1, 35, 36, 88, 87, 31, 4, 3, 106,
1700 105, 0, -1, 37, 21, 108, 112, 33, -1, 3, 4, 37, 33, -1, 106, 3, 33, 112, -1, 105, 106, 112, 108, -1, 0, 105, 108, 21, -1, 4, 0, 21, 37, 31, 37, 33, 112, 108, 21, -1, 38, 22, 109, 113, 34, -1, 33, 37, 38, 34, -1, 112, 33, 34, 113, -1, 108, 112, 113, 109, -1, 21, 108, 109, 22, -1, 37, 21, 22, 38, 31, 38, 34, 113, 109, 22, -1, 39, 23, 110, 114, 116, -1, 34, 38, 39, 116, -1, 113, 34, 116, 114, -1, 109, 113, 114, 110,
1701 -1, 22, 109, 110, 23, -1, 38, 22, 23, 39, 31, 39, 116, 114, 110, 23, -1, 40, 24, 111, 115, 117, -1, 116, 39, 40, 117, -1, 114, 116, 117, 115, -1, 110, 114, 115, 111, -1, 23, 110, 111, 24, -1, 39, 23, 24, 40, 31, 16, 3, 12, 13, 15, -1, 85, 81, 73, 69, 33, -1, 3, 16, 85, 33, -1, 12, 3, 33, 69, -1, 13, 12, 69, 73, -1, 15, 13, 73, 81, -1, 16, 15, 81, 85, 31, 85, 33, 69, 73, 81, -1, 86, 82, 74, 70, 34, -1, 33, 85,
1702 86, 34, -1, 69, 33, 34, 70, -1, 73, 69, 70, 74, -1, 81, 73, 74, 82, -1, 85, 81, 82, 86, 31, 86, 34, 70, 74, 82, -1, 87, 83, 75, 71, 35, -1, 34, 86, 87, 35, -1, 70, 34, 35, 71, -1, 74, 70, 71, 75, -1, 82, 74, 75, 83, -1, 86, 82, 83, 87, 31, 87, 35, 71, 75, 83, -1, 88, 84, 76, 72, 36, -1, 35, 87, 88, 36, -1, 71, 35, 36, 72, -1, 75, 71, 72, 76, -1, 83, 75, 76, 84, -1, 87, 83, 84, 88])
1703 cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080, 1110, 1140, 1170, 1200, 1237, 1274, 1311, 1348, 1385, 1422, 1459, 1496])
1704 m3.setConnectivity(c, cI)
1705 m3.checkConsistency()
1706 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1707 grpIds = DataArrayInt([2,7,12,17,101,106,111,116,160,164,170,173,176,179]); grpIds.setName("group")
1708 mfu = MEDFileUMesh()
1709 mfu.setMeshAtLevel(0, m3)
1710 mfu.setMeshAtLevel(-1, m2)
1711 mfu.setGroupsAtLevel(-1, [grpIds])
1712 nNod = m3.getNumberOfNodes()
1713 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1714 m3_bis = mfu.getMeshAtLevel(0)
1715 m3_bis.checkConsistency()
1716 m2_bis = mfu.getMeshAtLevel(-1)
1717 m2_bis.checkConsistency()
1718 self.assertEqual(nNod+23, mfu.getNumberOfNodes())
1719 self.assertEqual(nNod+23, m3_bis.getNumberOfNodes())
1720 self.assertEqual(nNod+23, m2_bis.getNumberOfNodes())
1721 self.assertEqual([5, 15, 16, 35, 36, 39, 40, 41, 42, 43, 44, 81, 82, 83, 84, 85, 86, 87, 88, 116, 117, 130, 131], nodesDup.getValues())
1722 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1723 self.assertEqual(set([0, 1, 2, 3, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39]), set(cells1.getValues()))
1724 self.assertEqual(set([4, 5, 6, 7, 42, 43, 44, 45, 46, 47]), set(cells2.getValues()))
1725 self.assertEqual([2, 7, 12, 17, 101, 106, 111, 116, 160, 164, 170, 173, 176, 179],mfu.getGroupArr(-1,"group").getValues())
1726 self.assertEqual([212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1727 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1728 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1732 def testBasicConstructors(self):
1733 GeneratePyfile18(self)
1734 fname="Pyfile18.med"
1735 TestWriteUMeshesRW1(self)
1736 m=MEDFileMesh.New(fname)
1737 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1738 m=MEDFileMesh.New(fname)
1739 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1740 m=MEDFileUMesh(fname)
1742 self.internalMEDMesh6()
1743 m=MEDFileCMesh("MEDFileMesh5.med")
1744 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1746 m=MEDFileMeshMultiTS()
1747 m=MEDFileMeshMultiTS(fname)
1748 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1750 m=MEDFileMeshes(fname)
1752 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1753 m=MEDFileFieldMultiTS()
1754 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1756 m=MEDFileFields(fname)
1758 m=MEDFileData(fname)
1760 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1761 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1762 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1763 m=MEDCouplingCMesh()
1764 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1765 m=MEDCouplingFieldTemplate(ON_NODES)
1766 m=MEDCouplingMultiFields([])
1767 m=MEDCouplingFieldOverTime([])
1770 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1772 def testBugSemiPartialField(self):
1773 fname="Pyfile46.med"
1774 m=MEDLoaderDataForTest.build2DMesh_3()
1775 m=m[:10] ; m.setName("mesh")
1776 f=m.getMeasureField(False)
1777 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1779 f.setName("SemiPartialField")
1781 f1=f[:6] ; f1.getMesh().setName(m.getName())
1782 f2=f[6:] ; f2.getMesh().setName(m.getName())
1784 mm=MEDFileUMesh.New()
1785 mm.setMeshAtLevel(0,m)
1786 ff=MEDFileField1TS.New()
1787 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1791 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1792 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1793 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1795 fread.checkConsistencyLight()
1796 fread2.checkConsistencyLight()
1797 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1798 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1802 def testUnPolyze1(self):
1803 fname="Pyfile47.med"
1804 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1805 ref=[13,14,14,12,12,12,12,12,12,12,12,13,12,14,14,13,15,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
1806 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1807 self.assertEqual(mm.unPolyze()[:3],(True,[[3,2,0],[4,3,2],[5,4,5],[14,2,9],[16,3,11],[31,2,14]],[[3,3,0],[4,3,3],[5,3,6],[14,3,9],[16,3,12],[18,1,15]]))
1809 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1810 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1811 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1812 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1813 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1814 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1815 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1816 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1818 mm.setRenumFieldArr(0,None)
1819 mm.setFamilyFieldArr(-1,None)
1823 def testUnPolyze2(self):
1824 fname="Pyfile48.med"
1825 mfd=MEDFileData.New()
1826 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1827 meshes=MEDFileMeshes.New()
1829 mfd.setMeshes(meshes)
1830 fields=MEDFileFields.New()
1831 mfd.setFields(fields)
1832 ff=MEDFileFieldMultiTS.New()
1833 fields.pushField(ff)
1835 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1836 f0_0.setTime(9.5,3,4)
1837 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1839 f0_0.setMesh(mm.getMeshAtLevel(0))
1840 ff.appendFieldNoProfileSBT(f0_0)
1841 ff0=ff.getTimeStepAtPos(0)
1842 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1843 f0_1.setTime(9.5,3,4)
1844 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1845 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1846 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1848 ff0.setFieldProfile(f0_1,mm,0,pfl)
1849 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1850 f0_2.setTime(9.5,3,4)
1851 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1852 da=DataArrayDouble.New([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.],8,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])#provoquer error
1853 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1855 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1856 mfd.getFields().shallowCpyGlobs(ff0)
1858 mfd.unPolyzeMeshes()
1860 fmts=mfd.getFields()[0]
1861 self.assertEqual(fmts.getNumberOfTS(),1)
1862 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1863 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1864 self.assertEqual(entry,[((3,0),(38,40)),((4,0),(40,43)),((5,0),(43,46)),((14,0),(46,48)),((16,0),(48,49)),((18,0),(49,50)),((40,0),(0,38))])
1865 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1866 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1867 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1868 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1869 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1870 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1871 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1872 self.assertEqual([(3,[(0,(38,40),'NewPfl_0','')]),(4,[(0,(40,43),'','')]),(5,[(0,(43,46),'','')]),(14,[(0,(46,48),'NewPfl_1','')]),(16,[(0,(48,49),'NewPfl_2','')]),(18,[(0,(49,50),'','')]),(40,[(1,(0,38),'','')])],fmts.getFieldSplitedByType(3,4))
1873 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1874 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1875 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1876 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1877 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1878 self.assertEqual(ftest0.getMesh().getNodalConnectivity().getValues(),[14,4,5,6,7,14,26,27,28,29,16,20,21,22,23,24,25,18,30,31,32,33,34,35,36,37])
1879 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1880 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1881 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1882 self.assertEqual(ftest1.getMesh().getNodalConnectivity().getValues(),[3,0,1,2,3,3,4,5,4,6,7,8,9,4,10,11,12,13,4,14,15,16,17,5,18,19,20,21,22,5,23,24,25,26,27,5,31,32,33,34,35,36,37])
1883 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1889 def testGaussWriteOnPfl1(self):
1890 fname="Pyfile49.med"
1891 fname2="Pyfile50.med"
1892 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1893 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1894 mQ8.allocateCells(1)
1895 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1896 mQ8.finishInsertingCells()
1897 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1898 mQ4.allocateCells(1)
1899 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1900 mQ4.finishInsertingCells()
1901 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1902 mT3.allocateCells(1)
1903 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1904 mT3.finishInsertingCells()
1906 tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]]
1907 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1908 ms[:]=(elt.deepCopy() for elt in ms)
1909 for m,t in zip(ms,tr):
1910 d=m.getCoords() ; d+= t
1912 m=MEDCouplingUMesh.MergeUMeshes(ms)
1914 m2=m[:13] ; m2.setName(m.getName())
1915 ### Use case 1 : Pfl on all tri3 and on all quad4. If we were on CELLS or GAUSS_NE no pfl were needed. But here 2 discs in tri3.
1916 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1917 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1920 da=DataArrayDouble(34) ; da.iota(3.)
1922 f.setName("fieldCellOnPflWithoutPfl")
1923 fInvalid=f.deepCopy()
1924 f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1925 f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1926 f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1927 f.checkConsistencyLight()
1928 fInvalid2=fInvalid.deepCopy()
1929 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1932 mm.setMeshAtLevel(0,m)
1935 f1ts=MEDFileField1TS.New()
1936 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1937 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1938 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1939 f1ts.setFieldProfile(f,mm,0,pfl)
1942 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1943 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1944 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1945 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1946 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1947 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1948 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1949 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1951 dataRead=MEDFileData.New(fname)
1952 mRead=dataRead.getMeshes()[0]
1953 f1tsRead=dataRead.getFields()[0][0]
1954 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1955 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1956 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1957 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1958 f2_bis.checkConsistencyLight()
1959 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1961 WriteField(fname2,f,True)
1962 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1963 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1964 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1965 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1966 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1967 m2=m[pfl] ; m2.setName(m.getName())
1970 da=DataArrayDouble(35) ; da.iota(3.)
1972 f.setName("fieldCellOnPflWithoutPfl2")
1973 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1974 f.setGaussLocalizationOnCells([2,4,5],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1975 f.setGaussLocalizationOnCells([6,7,8,9],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1976 f.checkConsistencyLight()
1979 mm.setMeshAtLevel(0,m)
1981 f1ts=MEDFileField1TS.New()
1982 f1ts.setFieldProfile(f,mm,0,pfl)
1983 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1984 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1985 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1986 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1988 dataRead=MEDFileData.New(fname)
1989 mRead=dataRead.getMeshes()[0]
1990 f1tsRead=dataRead.getFields()[0][0]
1991 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1992 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1993 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1994 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1995 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1996 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1997 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1999 WriteField(fname2,f,True)
2000 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2001 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2002 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2003 ## Use case 3 : no pfl but creation of pfls due to gauss pts
2004 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2007 da=DataArrayDouble(60) ; da.iota(3.)
2009 f.setName("fieldCellWithoutPfl")
2010 f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
2011 f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
2012 f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
2013 f.setGaussLocalizationOnCells([13,14,15,17,18],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8],[0.8,0.1,0.03,0.07])
2014 f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1])
2015 f.checkConsistencyLight()
2017 mm.setMeshAtLevel(0,m)
2018 f1ts=MEDFileField1TS.New()
2019 f1ts.setFieldNoProfileSBT(f)
2020 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2021 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2022 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2023 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2024 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2028 dataRead=MEDFileData.New(fname)
2029 mRead=dataRead.getMeshes()[0]
2030 f1tsRead=dataRead.getFields()[0][0]
2031 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2032 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2033 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2034 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2035 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2036 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2038 WriteField(fname2,f,True)
2039 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2040 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2041 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2044 # Testing profile on nodes when the profile is identity but not on all nodes.
2046 def testMEDFieldPflOnNode1(self):
2047 fname="Pyfile51.med"
2048 coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
2049 m0=MEDCouplingUMesh("Mesh",2)
2051 m0.insertNextCell(NORM_TRI3,[1,4,2])
2052 m0.insertNextCell(NORM_TRI3,[4,5,2])
2053 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2054 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2055 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2056 m0.finishInsertingCells()
2058 m1=MEDCouplingUMesh(m0.getName(),1)
2060 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2062 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2064 m1.finishInsertingCells()
2068 m.setMeshAtLevel(0,m0)
2069 m.setMeshAtLevel(-1,m1)
2071 dt=3 ; it=2 ; tim=4.5
2072 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2073 fieldNode0.setName("fieldNode0")
2074 fieldNode0.setTime(tim,dt,it)
2075 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2076 arr=DataArrayDouble([10,11,12,13,14])
2077 fieldNode0.setArray(arr)
2078 f0=MEDFileField1TS()
2079 f0.setFieldProfile(fieldNode0,m,0,pfl0)
2080 m.write(fname,2) ; f0.write(fname,0)
2081 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2082 fieldNode1.setName("fieldNode1")
2083 fieldNode1.setTime(tim,dt,it)
2084 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2085 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2086 fieldNode1.setArray(arr1)
2087 f1=MEDFileField1TS()
2088 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2091 ## Reading from file
2092 m=MEDFileMesh.New(fname)
2093 m0=m.getMeshAtLevel(0)
2094 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2095 fieldNode0.setMesh(m00)
2096 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2097 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2098 ff0_1.checkConsistencyLight()
2099 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2100 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2101 ff0_2.checkConsistencyLight()
2102 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2103 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2104 ff0_3.checkConsistencyLight()
2105 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2106 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2107 ff0_4.checkConsistencyLight()
2108 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2109 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2110 m1=m.getMeshAtLevel(-1)
2111 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2112 fieldNode1.setMesh(m10)
2113 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2114 ff1_1.checkConsistencyLight()
2115 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2116 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2117 ff1_2.checkConsistencyLight()
2118 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2119 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2120 ff1_3.checkConsistencyLight()
2121 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2122 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2123 ff1_4.checkConsistencyLight()
2124 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2125 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,m0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2126 self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_NODES,0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2127 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,0,m) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2128 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2129 arr_r.setName(fieldNode1.getArray().getName())
2130 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2131 pfl1_r.setName(pfl1.getName())
2132 self.assertTrue(pfl1_r.isEqual(pfl1))
2135 # Testing profile on nodes when the profile is identity but not on all nodes.
2137 def testMEDFieldPflOnCell1(self):
2138 fname="Pyfile52.med"
2139 coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
2140 m0=MEDCouplingUMesh("Mesh",2)
2142 m0.insertNextCell(NORM_TRI3,[1,4,2])
2143 m0.insertNextCell(NORM_TRI3,[4,5,2])
2144 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2145 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2146 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2147 m0.finishInsertingCells()
2149 m1=MEDCouplingUMesh(m0.getName(),1)
2151 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2153 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2155 m1.finishInsertingCells()
2159 m.setMeshAtLevel(0,m0)
2160 m.setMeshAtLevel(-1,m1)
2162 dt=3 ; it=2 ; tim=4.5
2163 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2164 fieldCell0.setName("fieldCell0")
2165 fieldCell0.setTime(tim,dt,it)
2166 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2167 arr=DataArrayDouble([10,11,12])
2168 fieldCell0.setArray(arr)
2169 f0=MEDFileField1TS()
2170 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2171 m.write(fname,2) ; f0.write(fname,0)
2172 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2173 fieldCell1.setName("fieldCell1")
2174 fieldCell1.setTime(tim,dt,it)
2175 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2176 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2177 fieldCell1.setArray(arr1)
2178 f1=MEDFileField1TS()
2179 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2182 ## Reading from file
2183 m=MEDFileMesh.New(fname)
2184 m0=m.getMeshAtLevel(0)
2185 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2186 fieldCell0.setMesh(m00)
2187 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2188 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2189 ff0_1.checkConsistencyLight()
2190 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2191 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2192 ff0_2.checkConsistencyLight()
2193 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2194 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2195 ff0_3.checkConsistencyLight()
2196 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2197 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2198 ff0_4.checkConsistencyLight()
2199 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2200 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2201 m1=m.getMeshAtLevel(-1)
2202 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2203 fieldCell1.setMesh(m10)
2204 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2205 ff1_1.checkConsistencyLight()
2206 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2207 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2208 ff1_2.checkConsistencyLight()
2209 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2210 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2211 ff1_3.checkConsistencyLight()
2212 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2213 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2214 ff1_4.checkConsistencyLight()
2215 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2216 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,m0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2217 self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_CELLS,0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2218 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,0,m) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2219 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2220 arr_r.setName(fieldCell1.getArray().getName())
2221 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2222 pfl1_r.setName(pfl1.getName())
2223 self.assertTrue(pfl1_r.isEqual(pfl1))
2227 def testMEDFileUMeshZipCoords1(self):
2229 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2230 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2231 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2232 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2233 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2234 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2235 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2236 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2237 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2238 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2239 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2240 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2242 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2243 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2244 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2245 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2246 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2247 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2248 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2249 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2250 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2254 def testMEDUMeshAddNodeGroup1(self):
2255 fname="Pyfile53.med"
2257 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2258 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2259 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2260 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2261 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2262 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2263 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2266 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2267 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2268 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2269 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2270 mm.setFamilyId("MyFam",2)
2271 mm.setFamilyId("MyOtherFam",3)
2272 mm.setFamilyId("MyOther-1",-1)
2273 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2274 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2276 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2278 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2279 mm.addNodeGroup(daTest)
2280 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2281 self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2283 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2284 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2286 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2287 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2288 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2289 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2291 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2292 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2293 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2294 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2295 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2296 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2298 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2299 da=DataArrayInt([3,12]) ; da.setName("grp0")
2300 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2302 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2304 mm=MEDFileMesh.New(fname)
2305 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2306 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2307 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2308 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2310 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2311 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2312 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2313 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2314 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2315 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2317 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2318 da=DataArrayInt([3,12]) ; da.setName("grp0")
2319 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2321 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2325 def testMEDUMeshAddGroup1(self):
2326 fname="Pyfile54.med"
2328 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2329 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2331 m0.insertNextCell(NORM_TRI3,[1,2,1])
2334 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2337 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2339 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2340 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2341 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2342 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2343 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2346 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2347 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2348 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2349 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2350 mm.setFamilyId("MyFam",2)
2351 mm.setFamilyId("MyOtherFam",3)
2352 mm.setFamilyId("MyOther-1",-1)
2353 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2354 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2356 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2357 mm.addGroup(0,daTest)
2358 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2359 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2360 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2361 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2363 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2364 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2365 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2366 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2367 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2368 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2370 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2371 da=DataArrayInt([3,12]) ; da.setName("grp0")
2372 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2374 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2376 mm=MEDFileMesh.New(fname)
2377 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2378 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2379 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2380 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2382 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2383 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2384 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2385 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2386 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2387 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2389 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2390 da=DataArrayInt([3,12]) ; da.setName("grp0")
2391 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2393 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2397 def testHeapMem1(self):
2398 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2400 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2402 m=MEDCouplingCMesh()
2403 arr=DataArrayDouble(10,1) ; arr.iota(0)
2404 m.setCoords(arr,arr)
2405 m=m.buildUnstructured()
2407 f=m.getMeasureField(False)
2408 cooMem = 100 * 2 * 8
2409 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2410 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2411 meshMem = cooMem + nodalMem + indexMem
2412 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2413 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2414 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2417 mm.setMeshAtLevel(0,m)
2418 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2419 ff=MEDFileField1TS()
2420 ff.setFieldNoProfileSBT(f)
2421 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2423 fff=MEDFileFieldMultiTS()
2424 fff.appendFieldNoProfileSBT(f)
2425 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2427 fff.appendFieldNoProfileSBT(f)
2428 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2429 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2432 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2433 fff.appendFieldProfile(f2,mm,0,pfl)
2434 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2435 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2436 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2439 def internalCurveLinearMesh1(self):
2440 fname="Pyfile55.med"
2441 mesh=MEDCouplingCurveLinearMesh();
2442 mesh.setTime(2.3,4,5);
2443 mesh.setTimeUnit("us");
2444 mesh.setName("Example of Cuve linear mesh");
2445 mesh.setDescription("buildCLMesh");
2446 a1=DataArrayDouble(3*20,1);
2447 a1.iota(7.) ; a1.rearrange(3);
2449 mesh.setNodeGridStructure([4,5]);
2450 mesh.checkConsistencyLight();
2452 m=MEDFileCurveLinearMesh()
2454 d=DataArrayInt(20) ; d.iota(4)
2455 m.setFamilyFieldArr(1,d)
2456 d3=DataArrayInt(20) ; d3.iota(400)
2457 m.setRenumFieldArr(1,d3)
2458 d2=DataArrayInt(12) ; d2.iota(40)
2459 m.setFamilyFieldArr(0,d2)
2460 d4=DataArrayInt(21) ; d4.iota(4000)
2461 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2463 m.setRenumFieldArr(1,d4)
2466 m1=MEDFileCurveLinearMesh(fname)
2468 self.assertTrue(mm.isEqual(mesh,1e-12))
2469 self.assertEqual(mm.getSpaceDimension(),3)
2470 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2472 m1=MEDFileMesh.New(fname)
2473 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2474 self.assertTrue(isinstance(m1.getUnivName(),str))
2475 self.assertTrue(len(m1.getUnivName())!=0)
2476 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2480 def testCurveLinearMesh1(self):
2481 self.internalCurveLinearMesh1()
2484 def testParameters1(self):
2485 self.internalParameters1()
2487 def internalParameters1(self):
2488 fname="Pyfile56.med"
2489 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2490 mm=MEDFileCMesh() ; mm.setMesh(m)
2491 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2493 p=MEDFileParameters()
2494 data.setParams(p) ; data.setMeshes(ms)
2495 pts=MEDFileParameterMultiTS()
2496 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2497 pts.appendValue(1,2,3.4,567.89)
2498 pts.appendValue(2,3,5.6,999.123)
2499 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2500 p.pushParam(pts) ; p.pushParam(pts2)
2502 p2=MEDFileParameters(fname)
2503 self.assertTrue(p.isEqual(p2,1e-14)[0])
2504 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2506 pts4=pts2.deepCopy()
2507 pts3=pts2.deepCopy()
2508 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2509 pts2.eraseTimeStepIds([0])
2510 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2512 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2513 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2514 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2515 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2516 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2518 self.assertTrue(p.isEqual(p2,1e-14)[0])
2519 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2520 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2521 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2522 self.assertEqual(p.getParamsNames(),('A','B'))
2523 ptsr=MEDFileParameterMultiTS(fname,"B")
2524 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2525 ptsr=MEDFileParameterMultiTS(fname)
2526 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2527 p1tsr=MEDFileParameterDouble1TS(fname)
2528 self.assertEqual(p1tsr.getName(),"A")
2529 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2530 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2531 self.assertEqual(p1tsr.getName(),"B")
2532 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2533 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2534 self.assertEqual(p1tsr.getName(),"B")
2535 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2536 data2=MEDFileData(fname)
2537 self.assertEqual(2,data2.getNumberOfParams())
2538 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2542 def testNamesOnCellAndNodesInMeshes1(self):
2543 fname="Pyfile58.med"
2544 fname2="Pyfile59.med"
2545 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2546 m1=m.buildDescendingConnectivity()[0]
2547 m1.sortCellsInMEDFileFrmt()
2550 mm.setMeshAtLevel(0,m)
2551 mm.setMeshAtLevel(-1,m1)
2552 namesCellL0=DataArrayAsciiChar(6,16)
2553 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2554 mm.setNameFieldAtLevel(0,namesCellL0)
2555 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2556 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2557 mm.setNameFieldAtLevel(-1,namesCellL1)
2558 namesNodes=namesCellL1.subArray(4,16)
2559 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2560 mm.setNameFieldAtLevel(1,namesNodes)
2563 mmr=MEDFileMesh.New(fname)
2564 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2565 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2566 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2567 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2568 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2569 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2570 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2571 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2573 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2574 # remove names on nodes
2575 mmCpy.setNameFieldAtLevel(1,None)
2576 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2577 mm.setNameFieldAtLevel(1,None)
2578 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2579 mm.setNameFieldAtLevel(-1,None)
2581 mmr=MEDFileMesh.New(fname)
2582 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2583 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2584 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2586 c=MEDCouplingCMesh()
2587 arr=DataArrayDouble([0.,1.1,2.3])
2588 c.setCoords(arr,arr)
2592 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2593 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2595 ccr=MEDFileMesh.New(fname2)
2596 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2597 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2598 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2599 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2600 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2601 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2602 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2604 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2608 def testToExportInExamples1(self):
2609 m=MEDCouplingCMesh()
2610 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2611 m.setCoords(arr,arr)
2612 m=m.buildUnstructured() ; m.setName("mesh")
2613 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2614 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2617 mm.setMeshAtLevel(0,m)
2618 mm.setMeshAtLevel(-1,m2)
2619 mm.setGroupsAtLevel(0,[grp1,grp2])
2620 mm.write("example.med",2)
2622 m0=mm.getMeshAtLevel(0)
2623 m1=mm.getMeshAtLevel(-1)
2624 grp1=mm.getGroupArr(0,"grp1")
2625 grp2=mm.getGroupArr(0,"grp2")
2627 whichGrp=DataArrayInt(m0.getNumberOfCells())
2628 whichGrp.fillWithValue(-1)
2629 for grpId,grp in enumerate(grps):
2632 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2633 e,f=a.areCellsIncludedIn(m1,2)
2635 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2636 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2637 c2.transformWithIndArr(whichGrp)
2638 splitOfM1=len(grps)*[None]
2639 for grpId,grp in enumerate(grps):
2640 tmp=c2.findIdsEqual(grpId)
2641 splitOfM1[grpId]=tmp
2643 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2644 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2648 def testBugCorrection1(self):
2651 self.assertEqual(fs[0],None)
2652 self.assertEqual(3,len(fs))
2656 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2657 f1Name="Pyfile60.med"
2658 f2Name="Pyfile61.med"
2659 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2661 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2663 # reading and compare
2664 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2665 for mn in d1.getMeshes().getMeshesNames():
2666 m1=d1.getMeshes()[mn]
2667 m2=d2.getMeshes()[mn]
2668 for lev in m1.getNonEmptyLevels():
2669 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2670 for grpName in grpsNames:
2671 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2675 for fieldn in d1.getFields().getFieldsNames():
2676 f1=d1.getFields()[fieldn]
2677 f2=d2.getFields()[fieldn]
2678 for it,order,tim in f1.getTimeSteps():
2681 if len(f1t.getPflsReallyUsed())!=0:
2683 for lev in f1t.getNonEmptyLevels()[1]:
2684 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2685 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2686 self.assertTrue(pfl1.isEqual(pfl2))
2687 self.assertTrue(arr1.isEqual(arr2,1e-10))
2692 for lev in f1t.getNonEmptyLevels()[1]:
2693 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2694 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2695 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2703 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2704 m=MEDCouplingCMesh()
2705 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2706 m.setCoords(arr,arr,arr)
2707 m=m.buildUnstructured()
2708 m2=m.buildDescendingConnectivity()[0]
2710 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2711 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2712 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2713 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2714 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2715 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2717 mm.setMeshAtLevel(0,m)
2718 mm.setGroupsAtLevel(0,[g1,g2])
2719 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2720 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2721 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2722 mm.normalizeFamIdsMEDFile()
2723 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2724 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2725 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2726 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2727 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2728 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2729 for g in mm.getGroupsOnSpecifiedLev(0):
2730 for f in mm.getFamiliesIdsOnGroup(g):
2731 self.assertTrue(f<0)
2736 mm.setMeshAtLevel(0,m)
2737 mm.setMeshAtLevel(-1,m2)
2738 mm.setGroupsAtLevel(0,[g1,g2])
2739 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2740 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2741 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2742 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2743 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2744 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2745 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2746 mm.normalizeFamIdsMEDFile()
2747 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2748 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2749 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2750 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2751 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2752 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2753 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2754 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2755 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2756 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2757 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2758 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2760 for g in mm.getGroupsOnSpecifiedLev(lev):
2761 for f in mm.getFamiliesIdsOnGroup(g):
2762 self.assertTrue(f<0)
2768 mm.setMeshAtLevel(0,m)
2769 mm.setMeshAtLevel(-1,m2)
2770 mm.setGroupsAtLevel(0,[g1,g2])
2771 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2772 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2773 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2774 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2775 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2776 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2777 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2778 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2779 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2780 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2781 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2782 mm.normalizeFamIdsMEDFile()
2783 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2784 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2785 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2786 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2787 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2788 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2789 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2790 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2791 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2792 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2793 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2794 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2795 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2796 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2797 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2798 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2799 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2800 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2802 for g in mm.getGroupsOnSpecifiedLev(lev):
2803 for f in mm.getFamiliesIdsOnGroup(g):
2804 self.assertTrue(f<0)
2808 for g in mm.getGroupsOnSpecifiedLev(1):
2809 for f in mm.getFamiliesIdsOnGroup(g):
2810 self.assertTrue(f>0)
2816 def testNonRegressionMantis22212ChangeGrpName(self):
2817 fileName="Pyfile62.med"
2818 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2819 m=MEDFileUMesh.New()
2820 m.setCoords(m2.getCoords())
2821 m.setMeshAtLevel(0,m2)
2822 m.setMeshAtLevel(-1,m1)
2823 m.setMeshAtLevel(-2,m0)
2824 m.setFamilyFieldArr(0,f2)
2825 m.setFamilyFieldArr(-1,f1)
2826 m.setFamilyFieldArr(-2,f0)
2827 m.setFamilyFieldArr(1,p)
2829 for i in range(nbOfFams):
2830 m.addFamily(fns[i],fids[i])
2833 for i in range(nbOfGrps):
2834 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2836 m.setName(m2.getName())
2837 m.setDescription(m2.getDescription())
2840 mm0=MEDFileMesh.New(fileName)
2841 mm1=MEDFileMesh.New(fileName)
2842 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2843 for name in groupNamesIni:
2844 mm1.changeGroupName(name,name+'N')
2846 mm1.write(fileName,2)
2849 mm2=MEDFileMesh.New(fileName)
2850 for name in groupNamesIni:
2851 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2852 arr0=mm0.getGroupArr(lev,name)
2853 arr2=mm2.getGroupArr(lev,name+'N')
2854 arr0.setName(name+'N')
2855 self.assertTrue(arr0.isEqual(arr2))
2861 def testInt32InMEDFileFieldStar1(self):
2862 self.internalInt32InMEDFileFieldStar1()
2864 def internalInt32InMEDFileFieldStar1(self):
2865 fname="Pyfile63.med"
2866 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2867 f1=f1.convertToIntField()
2869 mm1=MEDFileUMesh.New()
2870 mm1.setCoords(m1.getCoords())
2871 mm1.setMeshAtLevel(0,m1)
2872 mm1.setName(m1.getName())
2874 ff1=MEDFileIntField1TS()
2875 ff1.setFieldNoProfileSBT(f1)
2876 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2877 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2878 self.assertTrue(a.isEqual(f1,1e-12,0))
2880 a,b=ff1.getUndergroundDataArrayExt()
2881 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2882 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2883 ff2=MEDFileAnyTypeField1TS.New(fname)
2884 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2885 self.assertEqual(ff2.getTime(),[0,1,2.0])
2886 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2887 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2888 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2889 self.assertTrue(a.isEqual(f1,1e-12,0))
2891 c=ff2.getUndergroundDataArray() ; c*=2
2892 ff2.write(fname,0) # 2 time steps in
2893 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2894 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2895 self.assertEqual(len(ffs1),2)
2896 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2897 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2898 self.assertTrue(a.isEqual(f1,1e-12,0))
2899 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2900 self.assertTrue(a.isEqual(f1,1e-12,0))
2901 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2902 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2903 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2904 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2905 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2906 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2908 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2911 self.assertTrue(bc.isEqual(3*f1.getArray()))
2912 nf1=MEDCouplingFieldInt(ON_NODES)
2913 nf1.setTime(9.,10,-1)
2914 nf1.setMesh(f1.getMesh())
2915 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2916 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2917 nff1=MEDFileIntField1TS.New()
2918 nff1.setFieldNoProfileSBT(nf1)
2919 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2920 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2923 nf2=MEDCouplingFieldInt(ON_NODES)
2924 nf2.setTime(19.,20,-11)
2925 nf2.setMesh(f1.getMesh())
2926 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2927 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2928 nff2=MEDFileIntField1TS.New()
2929 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2930 nff2.setFieldProfile(nf2,mm1,0,npfl)
2931 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2932 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2933 self.assertTrue(b.isEqual(npfl))
2934 self.assertTrue(a.isEqual(narr2))
2936 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2937 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2938 self.assertTrue(b.isEqual(npfl))
2939 self.assertTrue(a.isEqual(narr2))
2941 nf3=MEDCouplingFieldDouble(ON_NODES)
2942 nf3.setName("VectorFieldOnNodesDouble")
2943 nf3.setTime(29.,30,-21)
2944 nf3.setMesh(f1.getMesh())
2945 nf3.setArray(f1.getMesh().getCoords())
2946 nff3=MEDFileField1TS.New()
2947 nff3.setFieldNoProfileSBT(nf3)
2949 fs=MEDFileFields(fname)
2950 self.assertEqual(len(fs),4)
2951 ffs=[it for it in fs]
2952 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2953 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2954 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2955 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2957 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2958 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2959 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2960 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2961 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2963 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2964 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2965 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2966 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2967 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2968 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2969 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2970 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2972 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2973 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2974 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2975 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2979 def testMEDFileFields1(self):
2980 fname="Pyfile64.med"
2981 f1=MEDCouplingFieldDouble(ON_NODES)
2982 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2983 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2984 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2986 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2988 f1.setName("Field1")
2989 ff1=MEDFileField1TS.New()
2990 ff1.setFieldNoProfileSBT(f1)
2991 self.assertEqual(ff1.getDtUnit(),"us")
2993 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2994 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2996 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2997 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2998 ff1s.setName("Field2")
3000 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3001 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3002 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3003 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3004 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3005 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3006 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3007 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3010 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3012 def testMEDFileFields2(self):
3013 fname="Pyfile65.med"
3014 # to check that all is initialize
3015 MEDFileField1TS().__str__()
3016 MEDFileFieldMultiTS().__str__()
3017 # building a mesh containing 4 tri3 + 5 quad4
3018 tri=MEDCouplingUMesh("tri",2)
3019 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3020 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3021 tris = [tri.deepCopy() for i in range(4)]
3022 for i,elt in enumerate(tris): elt.translate([i,0])
3023 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3024 quad=MEDCouplingUMesh("quad",2)
3025 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3026 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3027 quads = [quad.deepCopy() for i in range(5)]
3028 for i,elt in enumerate(quads): elt.translate([5+i,0])
3029 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3030 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3031 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3033 fmts0_0=MEDFileFieldMultiTS()
3034 fmts0_1=MEDFileFieldMultiTS()
3037 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3038 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3039 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3040 f.setTime(float(i+1)+0.1,i+1,-i-1)
3041 fmts0_0.appendFieldNoProfileSBT(f)
3042 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3043 self.assertEqual(fmts0_1.getName(),name1)
3044 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3045 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3047 # components names have been modified to generate errors
3048 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3049 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3050 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3051 f1ts.setInfo(['aa [bb]','eee [dd]'])
3052 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3054 # add a mismatch of nb of compos
3056 fmts0_2=fmts0_0.deepCopy()
3057 fmts0_3=fmts0_0.deepCopy()
3058 fmts0_4=fmts0_0.deepCopy()
3059 fmts0_5=fmts0_0.shallowCpy()
3060 self.assertTrue(len(fmts0_0)==10 and len(fmts0_1)==10 and len(fmts0_2)==10 and len(fmts0_3)==10 and len(fmts0_4)==10 and len(fmts0_5)==10)
3062 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3063 del fmts0_3[[1.1,(6,-6),9]]
3064 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3065 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3066 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3067 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3068 fmts0_7=fmts0_4[::-3]
3069 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3070 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3073 fs0.pushField(fmts0_0)
3074 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3075 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3076 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3077 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3079 fs0=MEDFileFields(fname)
3080 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3081 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3082 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3083 del fs1[["2ndField",3]]
3084 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3085 fs2=fs0[[0,"4thField"]]
3086 self.assertTrue(isinstance(fs2,MEDFileFields))
3087 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3089 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3092 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3094 def testMEDFileFields3(self):
3095 fname="Pyfile66.med"
3096 # building a mesh containing 4 tri3 + 5 quad4
3097 tri=MEDCouplingUMesh("tri",2)
3098 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3099 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3100 tris = [tri.deepCopy() for i in range(4)]
3101 for i,elt in enumerate(tris): elt.translate([i,0])
3102 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3103 quad=MEDCouplingUMesh("quad",2)
3104 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3105 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3106 quads = [quad.deepCopy() for i in range(5)]
3107 for i,elt in enumerate(quads): elt.translate([5+i,0])
3108 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3109 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3110 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3112 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3114 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3115 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3116 fmts0_0=MEDFileFieldMultiTS()
3117 fmts0_1=MEDFileFieldMultiTS()
3120 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3121 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3122 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3123 f.setTime(float(i+1)+0.1,i+1,-i-1)
3124 fmts0_0.appendFieldProfile(f,mm,0,pfl)
3125 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3126 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3127 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3130 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3131 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3132 fmts0_0.zipPflsNames()
3133 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3134 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3135 fmts0_2=fmts0_0.deepCopy()
3136 fmts0_3=fmts0_0.deepCopy()
3137 fmts0_4=fmts0_0.deepCopy()
3139 fs0.pushField(fmts0_0)
3140 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3141 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3142 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3143 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3145 fmts0_5=MEDFileFieldMultiTS()
3147 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3148 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3149 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3150 f.setTime(float(i+1)+0.1,i+1,-i-1)
3151 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3153 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3154 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3155 fs0.checkGlobsCoherency()
3160 def testSplitComponents1(self):
3161 fname="Pyfile67.med"
3162 # building a mesh containing 4 tri3 + 5 quad4
3163 tri=MEDCouplingUMesh("tri",2)
3164 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3165 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3166 tris = [tri.deepCopy() for i in range(4)]
3167 for i,elt in enumerate(tris): elt.translate([i,0])
3168 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3169 quad=MEDCouplingUMesh("quad",2)
3170 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3171 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3172 quads = [quad.deepCopy() for i in range(5)]
3173 for i,elt in enumerate(quads): elt.translate([5+i,0])
3174 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3175 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3176 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3178 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3180 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3181 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3183 fmts0_1=MEDFileFieldMultiTS()
3185 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3188 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3189 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3190 f.setTime(float(i+1)+0.1,i+1,-i-1)
3191 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3192 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3194 fs.pushField(fmts0_1)
3195 self.assertEqual(1,len(fs))
3196 l=fmts0_1.splitComponents()
3197 self.assertEqual(3,len(l))
3198 for elt in l: self.assertEqual(10,len(elt))
3199 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3201 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3204 self.assertEqual(4,len(fs))
3205 for elt in fs: self.assertEqual(10,len(elt))
3206 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3207 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3209 fs.write(fname,0) ; del fs
3211 fs1=MEDFileFields(fname)
3212 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3213 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3214 self.assertEqual(4,len(fs1))
3216 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3217 f1ts=fs1[fieldName][i]
3218 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3219 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3220 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3222 f1ts=fs1["1stField"][i]
3223 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3224 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3225 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3230 def testMEDFileFieldConvertTo1(self):
3231 fname="Pyfile68.med"
3232 # building a mesh containing 4 tri3 + 5 quad4
3233 tri=MEDCouplingUMesh("tri",2)
3234 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3235 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3236 tris = [tri.deepCopy() for i in range(4)]
3237 for i,elt in enumerate(tris): elt.translate([i,0])
3238 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3239 quad=MEDCouplingUMesh("quad",2)
3240 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3241 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3242 quads = [quad.deepCopy() for i in range(5)]
3243 for i,elt in enumerate(quads): elt.translate([5+i,0])
3244 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3245 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3246 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3247 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3249 ff0=MEDFileField1TS()
3250 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3251 f0.checkConsistencyLight()
3252 ff0.setFieldNoProfileSBT(f0)
3254 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3255 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3257 ff0i=ff0.convertToInt()
3258 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3259 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3261 ff1=ff0i.convertToDouble()
3262 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3263 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3265 ff0i64=ff0.convertToInt64()
3266 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3267 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3269 ff2=ff0i64.convertToDouble()
3270 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3271 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3273 del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3274 ff0=MEDFileField1TS()
3275 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
3276 f0.checkConsistencyLight()
3277 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3278 ff0.setFieldProfile(f0,mm,0,pfl)
3279 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3280 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3282 ff0i=ff0.convertToInt()
3283 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3284 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3285 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3287 ff1=ff0i.convertToDouble()
3288 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3289 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3290 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3292 ff0i64=ff0.convertToInt64()
3293 self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3294 self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3295 self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3297 ff2=ff0i64.convertToDouble()
3298 self.assertTrue(isinstance(ff2,MEDFileField1TS))
3299 self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3300 self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3302 ff0=MEDFileFieldMultiTS()
3303 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(0.1,0,10)
3304 f0.checkConsistencyLight()
3305 ff0.appendFieldProfile(f0,mm,0,pfl)
3306 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(100) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(1.1,1,11)
3307 f0.checkConsistencyLight()
3308 ff0.appendFieldProfile(f0,mm,0,pfl)
3309 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(200) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(2.1,2,12)
3310 f0.checkConsistencyLight()
3311 ff0.appendFieldProfile(f0,mm,0,pfl)
3312 ff1=ff0.convertToInt()
3313 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3314 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3315 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3316 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3317 arr=ff1.getUndergroundDataArray(dt,it)
3318 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3320 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3325 ff1=ff1.convertToDouble()
3326 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3327 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3328 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3329 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3330 arr=ff1.getUndergroundDataArray(dt,it)
3331 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3333 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3335 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3336 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3337 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3338 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3339 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3340 arr=ff1.getUndergroundDataArray(dt,it)
3341 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3343 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3347 def testMEDFileFieldPartialLoading(self):
3348 fname="Pyfile69.med"
3350 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3352 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3353 # building a mesh containing 30 tri3 + 40 quad4
3354 tri=MEDCouplingUMesh("tri",2)
3355 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3356 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3357 tris = [tri.deepCopy() for i in range(30)]
3358 for i,elt in enumerate(tris): elt.translate([i,0])
3359 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3360 quad=MEDCouplingUMesh("quad",2)
3361 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3362 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3363 quads = [quad.deepCopy() for i in range(40)]
3364 for i,elt in enumerate(quads): elt.translate([40+i,0])
3365 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3366 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3367 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3368 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3370 ff0=MEDFileField1TS()
3371 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3372 f0.checkConsistencyLight()
3373 ff0.setFieldNoProfileSBT(f0)
3376 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3377 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3379 ff0=MEDFileField1TS()
3380 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:50]) ; arr=DataArrayDouble(50*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
3381 f0.checkConsistencyLight()
3382 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3383 ff0.setFieldProfile(f0,mm,0,pfl)
3384 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3385 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3388 ff0=MEDFileField1TS(fname,False)
3389 self.assertEqual(ff0.getName(),"FieldCell")
3390 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3391 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3392 heap_memory_ref=ff0.getHeapMemorySize()
3393 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3395 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3396 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3397 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3399 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3400 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3401 heap_memory_ref=ff0.getHeapMemorySize()
3402 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3404 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3405 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3406 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3408 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3409 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3410 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3411 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3413 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3414 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3415 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3416 ff0.loadArraysIfNecessary() ##
3417 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3418 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3419 heap_memory_ref=ff0.getHeapMemorySize()
3420 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3422 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3423 self.assertEqual(hmd,-800) # -50*8*2
3425 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3427 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3428 heap_memory_ref=ff0.getHeapMemorySize()
3429 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3431 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3432 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3434 fieldName="FieldCellMultiTS"
3435 ff0=MEDFileFieldMultiTS()
3437 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota(float(t+1000)) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName(fieldName)
3438 f0.setTime(float(t)+0.1,t,100+t)
3439 f0.checkConsistencyLight()
3440 ff0.appendFieldNoProfileSBT(f0)
3444 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3445 heap_memory_ref=ff0.getHeapMemorySize()
3446 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3448 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3451 ffs=MEDFileFields(fname,False)
3452 heap_memory_ref=ffs.getHeapMemorySize()
3453 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3455 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3459 def testMEDFileMeshReadSelector1(self):
3460 mrs=MEDFileMeshReadSelector()
3461 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3462 mrs.__str__() ; mrs.__repr__()
3464 mrs=MEDFileMeshReadSelector(0)
3465 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3466 mrs=MEDFileMeshReadSelector(1)
3467 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3468 mrs=MEDFileMeshReadSelector(2)
3469 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3470 mrs=MEDFileMeshReadSelector(3)
3471 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3472 mrs=MEDFileMeshReadSelector(4)
3473 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3474 mrs=MEDFileMeshReadSelector(5)
3475 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3476 mrs=MEDFileMeshReadSelector(6)
3477 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3478 mrs=MEDFileMeshReadSelector(7)
3479 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3480 mrs=MEDFileMeshReadSelector(8)
3481 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3482 mrs=MEDFileMeshReadSelector(9)
3483 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3484 mrs=MEDFileMeshReadSelector(10)
3485 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3486 mrs=MEDFileMeshReadSelector(11)
3487 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3488 mrs=MEDFileMeshReadSelector(12)
3489 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3490 mrs=MEDFileMeshReadSelector(13)
3491 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3492 mrs=MEDFileMeshReadSelector(14)
3493 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3494 mrs=MEDFileMeshReadSelector(15)
3495 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3496 mrs=MEDFileMeshReadSelector(16)
3497 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3498 mrs=MEDFileMeshReadSelector(17)
3499 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3500 mrs=MEDFileMeshReadSelector(18)
3501 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3502 mrs=MEDFileMeshReadSelector(19)
3503 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3504 mrs=MEDFileMeshReadSelector(20)
3505 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3506 mrs=MEDFileMeshReadSelector(21)
3507 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3508 mrs=MEDFileMeshReadSelector(22)
3509 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3510 mrs=MEDFileMeshReadSelector(23)
3511 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3512 mrs=MEDFileMeshReadSelector(24)
3513 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3514 mrs=MEDFileMeshReadSelector(25)
3515 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3516 mrs=MEDFileMeshReadSelector(26)
3517 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3518 mrs=MEDFileMeshReadSelector(27)
3519 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3520 mrs=MEDFileMeshReadSelector(28)
3521 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3522 mrs=MEDFileMeshReadSelector(29)
3523 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3524 mrs=MEDFileMeshReadSelector(30)
3525 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3526 mrs=MEDFileMeshReadSelector(31)
3527 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3528 mrs=MEDFileMeshReadSelector(32)
3529 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3530 mrs=MEDFileMeshReadSelector(33)
3531 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3532 mrs=MEDFileMeshReadSelector(34)
3533 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3534 mrs=MEDFileMeshReadSelector(35)
3535 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3536 mrs=MEDFileMeshReadSelector(36)
3537 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3538 mrs=MEDFileMeshReadSelector(37)
3539 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3540 mrs=MEDFileMeshReadSelector(38)
3541 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3542 mrs=MEDFileMeshReadSelector(39)
3543 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3544 mrs=MEDFileMeshReadSelector(40)
3545 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3546 mrs=MEDFileMeshReadSelector(41)
3547 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3548 mrs=MEDFileMeshReadSelector(42)
3549 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3550 mrs=MEDFileMeshReadSelector(43)
3551 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3552 mrs=MEDFileMeshReadSelector(44)
3553 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3554 mrs=MEDFileMeshReadSelector(45)
3555 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3556 mrs=MEDFileMeshReadSelector(46)
3557 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3558 mrs=MEDFileMeshReadSelector(47)
3559 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3560 mrs=MEDFileMeshReadSelector(48)
3561 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3562 mrs=MEDFileMeshReadSelector(49)
3563 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3564 mrs=MEDFileMeshReadSelector(50)
3565 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3566 mrs=MEDFileMeshReadSelector(51)
3567 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3568 mrs=MEDFileMeshReadSelector(52)
3569 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3570 mrs=MEDFileMeshReadSelector(53)
3571 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3572 mrs=MEDFileMeshReadSelector(54)
3573 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3574 mrs=MEDFileMeshReadSelector(55)
3575 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3576 mrs=MEDFileMeshReadSelector(56)
3577 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3578 mrs=MEDFileMeshReadSelector(57)
3579 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3580 mrs=MEDFileMeshReadSelector(58)
3581 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3582 mrs=MEDFileMeshReadSelector(59)
3583 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3584 mrs=MEDFileMeshReadSelector(60)
3585 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3586 mrs=MEDFileMeshReadSelector(61)
3587 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3588 mrs=MEDFileMeshReadSelector(62)
3589 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3590 mrs=MEDFileMeshReadSelector(63)
3591 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3593 mrs=MEDFileMeshReadSelector(63)
3594 mrs.setCellFamilyFieldReading(False)
3595 self.assertEqual(mrs.getCode(),62)
3596 mrs.setCellFamilyFieldReading(True)
3597 self.assertEqual(mrs.getCode(),63)
3598 mrs.setNodeFamilyFieldReading(False)
3599 self.assertEqual(mrs.getCode(),61)
3600 mrs.setNodeFamilyFieldReading(True)
3601 self.assertEqual(mrs.getCode(),63)
3602 mrs.setCellNameFieldReading(False)
3603 self.assertEqual(mrs.getCode(),59)
3604 mrs.setCellNameFieldReading(True)
3605 self.assertEqual(mrs.getCode(),63)
3606 mrs.setNodeNameFieldReading(False)
3607 self.assertEqual(mrs.getCode(),55)
3608 mrs.setNodeNameFieldReading(True)
3609 self.assertEqual(mrs.getCode(),63)
3610 mrs.setCellNumFieldReading(False)
3611 self.assertEqual(mrs.getCode(),47)
3612 mrs.setCellNumFieldReading(True)
3613 self.assertEqual(mrs.getCode(),63)
3614 mrs.setNodeNumFieldReading(False)
3615 self.assertEqual(mrs.getCode(),31)
3616 mrs.setNodeNumFieldReading(True)
3617 self.assertEqual(mrs.getCode(),63)
3621 def testPartialReadOfMeshes(self):
3622 fname="Pyfile70.med"
3623 # building a mesh containing 4 tri3 + 5 quad4
3624 tri=MEDCouplingUMesh("tri",2)
3625 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3626 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3627 tris = [tri.deepCopy() for i in range(4)]
3628 for i,elt in enumerate(tris): elt.translate([i,0])
3629 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3630 quad=MEDCouplingUMesh("quad",2)
3631 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3632 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3633 quads = [quad.deepCopy() for i in range(5)]
3634 for i,elt in enumerate(quads): elt.translate([5+i,0])
3635 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3636 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3637 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3638 m1=m.buildDescendingConnectivity()[0]
3639 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3641 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3642 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3643 mm.setGroupsAtLevel(0,[grp0,grp1])
3644 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3645 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3646 mm.setGroupsAtLevel(-1,[grp2,grp3])
3647 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3648 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3649 mm.setGroupsAtLevel(1,[grp4,grp5])
3650 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3651 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3652 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3656 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3657 b4_ref_heap_mem=mm.getHeapMemorySize()
3658 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3659 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3660 ref_heap_mem=mm.getHeapMemorySize()
3661 # check the gain of memory using 1GTUMesh instead of UMesh
3662 self.assertTrue(ref_heap_mem-b4_ref_heap_mem>=(32+9)*4*2-32)# 32+9=nbCells 4=sizeof(int) 2=the types+index -32=loss linked to vector
3664 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3665 self.assertEqual(len(mm.getGroupsNames()),0)
3666 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3667 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3668 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3669 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3670 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3671 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3672 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3673 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3674 delta1=ref_heap_mem-mm.getHeapMemorySize()
3675 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3677 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3678 self.assertEqual(len(mm.getGroupsNames()),6)
3679 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3680 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3681 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3682 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3683 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3684 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3685 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3686 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3687 delta2=ref_heap_mem-mm.getHeapMemorySize()
3688 self.assertTrue(delta2<delta1)
3689 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3691 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3692 self.assertEqual(len(mm.getGroupsNames()),6)
3693 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3694 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3695 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3696 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3697 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3698 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3699 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3700 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3701 delta3=ref_heap_mem-mm.getHeapMemorySize()
3702 self.assertTrue(delta3<delta2)
3703 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3705 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3706 self.assertEqual(len(mm.getGroupsNames()),6)
3707 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3708 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3709 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3710 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3711 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3712 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3713 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3714 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3715 delta4=ref_heap_mem-mm.getHeapMemorySize()
3716 self.assertTrue(delta4<delta3)
3717 self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3719 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3720 self.assertEqual(len(mm.getGroupsNames()),6)
3721 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3722 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3723 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3724 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3725 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3726 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3727 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3728 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3729 delta5=ref_heap_mem-mm.getHeapMemorySize()
3730 self.assertTrue(delta5<delta4)
3731 self.assertEqual(delta5,0)
3734 # this test checks that setFieldProfile perform a check of the array length
3735 # compared to the profile length. This test also checks that mesh attribute of field
3736 # is not used by setFieldProfile (because across this test mesh is equal to None)
3738 def testCheckCompatibilityPfl1(self):
3739 # building a mesh containing 4 tri3 + 5 quad4
3740 tri=MEDCouplingUMesh("tri",2)
3741 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3742 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3743 tris = [tri.deepCopy() for i in range(4)]
3744 for i,elt in enumerate(tris): elt.translate([i,0])
3745 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3746 quad=MEDCouplingUMesh("quad",2)
3747 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3748 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3749 quads = [quad.deepCopy() for i in range(5)]
3750 for i,elt in enumerate(quads): elt.translate([5+i,0])
3751 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3752 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3753 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3754 m1=m.buildDescendingConnectivity()[0]
3755 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3757 f1ts=MEDFileField1TS()
3758 f=MEDCouplingFieldDouble(ON_NODES)
3759 vals=DataArrayDouble(7) ; vals.iota(1000)
3761 f.setName("anonymous") # f has no mesh it is not a bug
3762 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3763 f1ts.setFieldProfile(f,mm,0,pfl)
3765 f1ts=MEDFileField1TS()
3766 f=MEDCouplingFieldDouble(ON_NODES)
3767 vals=DataArrayDouble(8) ; vals.iota(1000)
3769 f.setName("anonymous") # f has no mesh it is not a bug
3770 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3771 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3773 f1ts=MEDFileField1TS()
3774 f=MEDCouplingFieldDouble(ON_CELLS)
3775 vals=DataArrayDouble(7) ; vals.iota(1000)
3777 f.setName("anonymous") # f has no mesh it is not a bug
3778 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3779 f1ts.setFieldProfile(f,mm,0,pfl)
3780 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3782 f1ts=MEDFileField1TS()
3783 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3784 vals=DataArrayDouble(27) ; vals.iota(1000)
3786 f.setName("anonymous") # f has no mesh it is not a bug
3787 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3789 f.setGaussLocalizationOnCells([0,1],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.1,0.1],[0.3,0.6,0.1])
3790 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3791 f.setGaussLocalizationOnCells([3,4,5,6],[0.,0.,1.,0.,1.,1.,0.,1.],[0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.5,0.5],[0.2,0.3,0.4,0.07,0.03])
3793 f1ts.setFieldProfile(f,mm,0,pfl)
3794 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3795 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3796 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3797 vals=DataArrayDouble(27) ; vals.iota(1000)
3798 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3800 f1ts=MEDFileField1TS()
3801 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3802 vals=DataArrayDouble(25) ; vals.iota(1000)
3804 f.setName("anonymous") # f has no mesh it is not a bug
3805 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3806 f1ts.setFieldProfile(f,mm,0,pfl)
3807 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3808 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3810 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3811 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3813 f1ts=MEDFileField1TS()
3814 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3815 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3817 f1ts.setFieldProfile(f,mm,0,pfl)
3821 def testWRMeshWithNoCells(self):
3822 fname="Pyfile71.med"
3823 a=DataArrayDouble(4) ; a.iota()
3824 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3825 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3827 m.setMeshAtLevel(0,m00)
3828 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3829 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3833 m=MEDFileMesh.New(fname)
3834 self.assertEqual((),m.getNonEmptyLevels())
3835 self.assertTrue(m.getCoords().isEqual(DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3)]),1e-12))
3836 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3837 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3841 def testWRQPolyg1(self):
3842 fname="Pyfile72.med"
3843 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3844 m.insertNextCell([0,2,1,3])
3845 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3847 ms = [m.deepCopy() for i in range(4)]
3848 for i,elt in enumerate(ms):
3849 elt.translate([float(i)*1.5,0.])
3851 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3852 m0.convertAllToPoly()
3854 ms = [m.deepCopy() for i in range(5)]
3855 for i,elt in enumerate(ms):
3856 elt.translate([float(i)*1.5,1.5])
3858 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3859 m1.convertAllToPoly()
3860 m1.convertLinearCellsToQuadratic()
3862 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3865 mm.setMeshAtLevel(0,m)
3866 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3867 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3868 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3869 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3874 mm_read=MEDFileUMesh(fname)
3875 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3876 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3877 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3878 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3880 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3882 arr0=DataArrayDouble(9) ; arr0.iota()
3883 arr1=DataArrayDouble(9) ; arr1.iota(100)
3884 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3885 f.setArray(arr) ; f.checkConsistencyLight()
3887 ff=MEDFileField1TS()
3888 ff.setFieldNoProfileSBT(f)
3891 ff_read=MEDFileField1TS(fname)
3892 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3893 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3897 def testLoadIfNecessaryOnFromScratchFields0(self):
3899 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3901 fname="Pyfile77.med"
3902 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3903 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3905 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3906 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3907 m.finishInsertingCells()
3909 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3910 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3914 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3915 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3917 f0.setName("myELNOField")
3918 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3919 f0.setArray(arrs[0])
3920 ff0.appendFieldNoProfileSBT(f0)
3923 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3924 f0.setArray(arrs[1])
3925 ff0.appendFieldNoProfileSBT(f0)
3928 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3929 f0.setArray(arrs[2])
3930 ff0.appendFieldNoProfileSBT(f0)
3933 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3934 f0.setArray(arrs[3])
3935 ff0.appendFieldNoProfileSBT(f0)
3937 for i,arr in enumerate(arrs):
3938 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3939 fs[0][i].loadArraysIfNecessary()
3940 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3942 fs.loadArraysIfNecessary()
3943 for i,arr in enumerate(arrs):
3944 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3946 fs[0].loadArraysIfNecessary()
3947 for i,arr in enumerate(arrs):
3948 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3953 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3954 """ This test is very important, because the same mechanism is used by the MEDReader to generate a field on all the mesh without any processing and memory.
3956 fname="Pyfile78.med"
3957 coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
3958 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3959 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3961 for elt in [[0,1,2,3],[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7],[5,6,7,8]]:#6
3962 m0.insertNextCell(NORM_TETRA4,elt)
3964 for elt in [[0,1,2,3,4],[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]]:#5
3965 m0.insertNextCell(NORM_PYRA5,elt)
3967 for elt in [[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8]]:#4
3968 m0.insertNextCell(NORM_PENTA6,elt)
3970 m0.checkConsistency()
3971 m1=MEDCouplingUMesh(); m1.setName("mesh")
3972 m1.setMeshDimension(2);
3973 m1.allocateCells(5);
3974 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3975 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3976 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3977 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3978 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3979 m1.setCoords(coords);
3980 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3982 m3.insertNextCell(NORM_POINT1,[2])
3983 m3.insertNextCell(NORM_POINT1,[3])
3984 m3.insertNextCell(NORM_POINT1,[4])
3985 m3.insertNextCell(NORM_POINT1,[5])
3988 mm.setMeshAtLevel(0,m0)
3989 mm.setMeshAtLevel(-1,m1)
3990 mm.setMeshAtLevel(-3,m3)
3992 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3993 mm=MEDFileMesh.New(fname)
3995 fmts=MEDFileFieldMultiTS()
3996 f1ts=MEDFileField1TS()
3997 for lev in mm.getNonEmptyLevels():
3998 for gt in mm.getGeoTypesAtLevel(lev):
3999 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4000 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4001 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4002 f.setArray(arr) ; f.setName("f0")
4003 f1ts.setFieldNoProfileSBT(f)
4006 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4007 for lev in [0,-1,-3]:
4008 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4010 fmts.pushBackTimeStep(f1ts)
4014 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4015 fs=MEDFileFields(fname)
4016 self.assertEqual(len(fs),1)
4017 self.assertEqual(len(fs[0]),1)
4019 self.assertEqual(f1ts.getFieldSplitedByType(),[(0,[(0,(0,4),'','')]),(3,[(0,(4,6),'','')]),(4,[(0,(6,9),'','')]),(14,[(0,(9,15),'','')]),(15,[(0,(15,20),'','')]),(16,[(0,(20,24),'','')])])
4020 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0,1,2,3,0,1,0,1,2,0,1,2,3,4,5,0,1,2,3,4,0,1,2,3]),1e-12))
4024 def testMEDFileUMeshSetName(self):
4025 """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the conversion is performed in memory and a preparation is done then.
4026 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4028 fname="Pyfile79.med"
4029 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4031 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4032 coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
4033 m0.allocateCells(5);
4034 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4035 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4036 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4037 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4038 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4039 m0.setCoords(coords);
4040 mm.setMeshAtLevel(0,m0)
4041 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4043 m2.insertNextCell(NORM_POINT1,[2])
4044 m2.insertNextCell(NORM_POINT1,[3])
4045 m2.insertNextCell(NORM_POINT1,[4])
4046 m2.insertNextCell(NORM_POINT1,[5])
4047 mm.setMeshAtLevel(-2,m2)
4048 self.assertEqual(mm.getName(),"")
4049 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4050 mm.forceComputationOfParts()
4051 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4053 self.assertEqual(mm.getName(),"abc")
4054 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4055 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4056 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4057 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4061 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4062 fileName="Pyfile80.med"
4063 m=MEDCouplingCMesh() ; m.setName("cmesh")
4064 arr=DataArrayDouble(6) ; arr.iota()
4065 m.setCoords(arr,arr)
4066 nbCells=m.getNumberOfCells()
4067 self.assertEqual(25,nbCells)
4068 f=MEDCouplingFieldDouble(ON_CELLS)
4069 f.setName("FieldOnCell") ; f.setMesh(m)
4070 arr=DataArrayDouble(nbCells) ; arr.iota()
4074 fmts=MEDFileFieldMultiTS()
4076 for i in range(nbCells):
4077 t=(float(i)+0.1,i+1,-i-2)
4079 arr2=DataArrayDouble(nbCells)
4080 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4083 f1ts=MEDFileField1TS()
4084 f1ts.setFieldNoProfileSBT(f)
4085 fmts.pushBackTimeStep(f1ts)
4087 fmts.unloadArraysWithoutDataLoss()
4088 self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4089 fs=MEDFileFields() ; fs.pushField(fmts)
4090 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4091 fs.unloadArraysWithoutDataLoss()
4092 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4094 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4095 f1ts.unloadArraysWithoutDataLoss()
4096 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4097 mm.write(fileName,2)
4098 fs.write(fileName,0)
4099 del m,fmts,mm,f,f1ts
4101 mm=MEDFileMesh.New(fileName)
4102 fmts=MEDFileFieldMultiTS(fileName)
4103 self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4104 fmts.unloadArraysWithoutDataLoss()
4105 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4106 fmts.loadArraysIfNecessary()
4107 self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4109 fs=MEDFileFields(fileName)
4110 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4111 fs.unloadArraysWithoutDataLoss()
4112 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4113 fs.loadArraysIfNecessary()
4114 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4116 f1ts=MEDFileField1TS(fileName)
4117 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4118 f1ts.unloadArraysWithoutDataLoss()
4119 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4120 f1ts.loadArraysIfNecessary()
4121 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4125 def testMEDFileUMeshLoadPart1(self):
4126 """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specified using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
4127 memory of the returned instance.
4129 fileName="Pyfile81.med"
4130 arr=DataArrayDouble(6) ; arr.iota()
4131 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4132 m=m.buildUnstructured()
4134 m.changeSpaceDimension(3,0.)
4135 infos=["aa [b]","cc [de]","gg [klm]"]
4136 m.getCoords().setInfoOnComponents(infos)
4137 m.checkConsistency()
4139 mm.setMeshAtLevel(0,m)
4140 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4141 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4142 mm.setMeshAtLevel(-1,m1)
4143 renum0=DataArrayInt([3,6,7,10,11,0,2,1,9,8,5,4,12,13,14,24,23,22,21,20,19,18,17,16,15])
4144 famField0=DataArrayInt([-3,-6,-7,-10,-11,0,-2,-1,-9,-8,-5,-4,-12,-13,-14,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15])
4145 namesCellL0=DataArrayAsciiChar(25,16)
4146 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
4147 renumM1=DataArrayInt([3,4,0,2,1])
4148 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4149 mm.setRenumFieldArr(0,renum0)
4150 mm.setFamilyFieldArr(0,famField0)
4151 mm.setNameFieldAtLevel(0,namesCellL0)
4152 mm.setRenumFieldArr(-1,renumM1)
4153 mm.setFamilyFieldArr(-1,famFieldM1)
4154 renum1=DataArrayInt([13,16,17,20,21,10,12,11,19,18,15,14,22,23,24,34,33,32,31,30,29,28,27,26,25,45,44,43,42,41,40,39,38,37,36,35])
4155 famField1=DataArrayInt([-13,-16,-17,-20,-21,-10,-12,-11,-19,-18,-15,-14,-22,-23,-24,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35])
4156 namesNodes=DataArrayAsciiChar(36,16)
4157 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
4158 mm.setRenumFieldArr(1,renum1)
4159 mm.setFamilyFieldArr(1,famField1)
4160 mm.setNameFieldAtLevel(1,namesNodes)
4161 mm.setFamilyId("Fam7",77)
4162 mm.setFamilyId("Fam8",88)
4163 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4164 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4165 mm.write(fileName,2)
4167 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4168 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4169 self.assertTrue(mm0.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
4170 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
4171 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4172 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4173 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4174 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4175 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4176 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4177 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4179 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4180 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4181 self.assertTrue(mm1.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,6,5,11,12,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,12,11,17,18,13,12,18,19,14,13,19,20,15,14,20,21,16,15,21,22])))
4182 coo=DataArrayDouble([(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(5,3,0),(0,4,0),(1,4,0),(2,4,0),(3,4,0),(4,4,0),(5,4,0),(0,5,0),(1,5,0),(2,5,0),(3,5,0),(4,5,0),(5,5,0)]) ; coo.setInfoOnComponents(infos)
4183 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4184 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4185 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4186 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4187 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4188 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4189 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4191 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4192 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4193 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4194 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4195 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4196 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4197 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4198 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4199 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
4200 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4201 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
4202 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4203 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4204 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4205 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4209 def testMEDFileFieldsLoadPart1(self):
4210 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4212 fileName="Pyfile82.med"
4214 compos=["aa [kg]","bbb [m/s]"]
4215 arr=DataArrayDouble(6) ; arr.iota()
4216 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4217 m=m.buildUnstructured()
4219 m.changeSpaceDimension(3,0.)
4220 infos=["aa [b]","cc [de]","gg [klm]"]
4221 m.getCoords().setInfoOnComponents(infos)
4222 m.checkConsistency()
4223 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4225 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4226 arr[:,0]=list(range(25))
4227 arr[:,1]=list(range(100,125))
4229 WriteField(fileName,f,True)
4230 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4231 f.setName("FieldNode")
4232 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4233 arr[:,0]=list(range(200,236))
4234 arr[:,1]=list(range(300,336))
4236 f.checkConsistencyLight()
4237 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4240 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4242 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4243 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4246 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4248 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4250 fs[0][0].loadArrays()
4251 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4252 arr.setInfoOnComponents(compos)
4253 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4254 fs[1][0].loadArrays()
4255 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4256 arr.setInfoOnComponents(compos)
4257 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4261 def testMEDFileWithoutCells1(self):
4262 fileName="Pyfile83.med"
4263 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4264 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4268 mm.write(fileName,2)
4270 mm=MEDFileMesh.New(fileName)
4271 self.assertEqual(mm.getName(),"mesh")
4272 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4276 def testZipCoordsWithLoadPart1(self):
4277 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4279 fileName="Pyfile84.med"
4281 compos=["aa [kg]","bbb [m/s]"]
4282 arr=DataArrayDouble(6) ; arr.iota()
4283 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4284 m=m.buildUnstructured()
4286 m.changeSpaceDimension(3,0.)
4287 infos=["aa [b]","cc [de]","gg [klm]"]
4288 m.getCoords().setInfoOnComponents(infos)
4289 m.checkConsistency()
4290 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4292 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4293 arr[:,0]=list(range(25))
4294 arr[:,1]=list(range(100,125))
4296 WriteField(fileName,f,True)
4297 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4298 f.setName("FieldNode")
4299 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4300 arr[:,0]=list(range(200,236))
4301 arr[:,1]=list(range(300,336))
4303 f.checkConsistencyLight()
4304 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4307 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4309 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4310 self.assertEqual(spd.getSlice(),slice(4,6,1))
4311 spd=mm.getPartDefAtLevel(1)
4312 self.assertEqual(spd.getSlice(),slice(4,14,1))
4313 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4314 mm.zipCoords() # <- The important line is here !
4315 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4316 self.assertEqual(spd.getSlice(),slice(4,6,1))
4317 spd=mm.getPartDefAtLevel(1)
4318 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4319 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4320 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4321 fs[0][0].loadArrays()
4322 arr=DataArrayDouble([(4,104),(5,105)])
4323 arr.setInfoOnComponents(compos)
4324 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4325 fs[1][0].loadArrays()
4326 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4327 arr.setInfoOnComponents(compos)
4328 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4329 m_ref = mm[0].deepCopy()
4330 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4332 mrs = MEDFileMeshReadSelector()
4333 mrs.setNumberOfCoordsLoadSessions(2)
4334 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4336 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4337 self.assertEqual(spd.getSlice(),slice(4,6,1))
4338 spd=mm.getPartDefAtLevel(1)
4339 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4340 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4341 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4342 fs[0][0].loadArrays()
4343 arr=DataArrayDouble([(4,104),(5,105)])
4344 arr.setInfoOnComponents(compos)
4345 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4346 fs[1][0].loadArrays()
4347 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4348 arr.setInfoOnComponents(compos)
4349 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4350 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4354 def testMEDFileCMeshSetGroupsAtLevel(self):
4355 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4357 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4359 mm=MEDFileCMesh() ; mm.setMesh(m)
4360 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4361 mm.setGroupsAtLevel(0,[grp])
4362 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4366 def testMEDFileUMeshBuildExtrudedMesh1(self):
4367 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4368 fileName="Pyfile85.med"
4371 meshName3DOut="Mesh3D"
4373 d1=DataArrayInt([0,4,20,24])
4374 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4376 a=DataArrayDouble(6) ; a.iota()
4377 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4378 m=m.buildUnstructured()
4379 d1c=d1.buildComplement(m.getNumberOfCells())
4380 m=m[d1c] ; m.zipCoords()
4381 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4383 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4384 m.setName(meshName2D)
4385 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4386 e=d.deltaShiftIndex().findIdsEqual(1)
4389 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4390 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4391 mm.setGroupsAtLevel(0,[grp0])
4392 grp1=e ; grp1.setName("grp1")
4393 mm.setGroupsAtLevel(-1,[grp1])
4394 mm.write(fileName,2)
4396 a=DataArrayDouble(3) ; a.iota()
4397 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4398 tmp.setName(meshName1D)
4399 tmp.changeSpaceDimension(3)
4400 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4402 mm1D.setMeshAtLevel(0,tmp)
4403 mm1D.write(fileName,0)
4405 mm2D=MEDFileMesh.New(fileName,meshName2D)
4406 mm1D=MEDFileMesh.New(fileName,meshName1D)
4407 m1D=mm1D.getMeshAtLevel(0)
4408 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4410 self.assertEqual(mm3D.getName(),mm2D.getName())
4411 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4412 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4413 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4414 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4415 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4416 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4417 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4418 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4419 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4420 d=DataArrayDouble([(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(4.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(4.,1.,0.),(5.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(4.,2.,0.),(5.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.),(4.,3.,0.),(5.,3.,0.),(0.,4.,0.),(1.,4.,0.),(2.,4.,0.),(3.,4.,0.),(4.,4.,0.),(5.,4.,0.),(1.,5.,0.),(2.,5.,0.),(3.,5.,0.),(4.,5.,0.),(1.,0.,1.),(2.,0.,1.),(3.,0.,1.),(4.,0.,1.),(0.,1.,1.),(1.,1.,1.),(2.,1.,1.),(3.,1.,1.),(4.,1.,1.),(5.,1.,1.),(0.,2.,1.),(1.,2.,1.),(2.,2.,1.),(3.,2.,1.),(4.,2.,1.),(5.,2.,1.),(0.,3.,1.),(1.,3.,1.),(2.,3.,1.),(3.,3.,1.),(4.,3.,1.),(5.,3.,1.),(0.,4.,1.),(1.,4.,1.),(2.,4.,1.),(3.,4.,1.),(4.,4.,1.),(5.,4.,1.),(1.,5.,1.),(2.,5.,1.),(3.,5.,1.),(4.,5.,1.),(1.,0.,2.),(2.,0.,2.),(3.,0.,2.),(4.,0.,2.),(0.,1.,2.),(1.,1.,2.),(2.,1.,2.),(3.,1.,2.),(4.,1.,2.),(5.,1.,2.),(0.,2.,2.),(1.,2.,2.),(2.,2.,2.),(3.,2.,2.),(4.,2.,2.),(5.,2.,2.),(0.,3.,2.),(1.,3.,2.),(2.,3.,2.),(3.,3.,2.),(4.,3.,2.),(5.,3.,2.),(0.,4.,2.),(1.,4.,2.),(2.,4.,2.),(3.,4.,2.),(4.,4.,2.),(5.,4.,2.),(1.,5.,2.),(2.,5.,2.),(3.,5.,2.),(4.,5.,2.)])
4421 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4422 d=DataArrayInt([16,1,0,5,33,32,37,16,1,5,6,33,37,38,16,2,1,6,34,33,38,16,2,6,7,34,38,39,16,3,2,7,35,34,39,16,3,7,8,35,39,40,16,5,4,10,37,36,42,16,5,10,11,37,42,43,16,9,8,14,41,40,46,16,9,14,15,41,46,47,16,11,10,16,43,42,48,16,11,16,17,43,48,49,16,15,14,20,47,46,52,16,15,20,21,47,52,53,16,17,16,22,49,48,54,16,17,22,23,49,54,55,16,21,20,26,53,52,58,16,21,26,27,53,58,59,16,24,23,28,56,55,60,16,24,28,29,56,60,61,16,25,24,29,57,56,61,16,25,29,30,57,61,62,16,26,25,30,58,57,62,16,26,30,31,58,62,63,16,33,32,37,65,64,69,16,33,37,38,65,69,70,16,34,33,38,66,65,70,16,34,38,39,66,70,71,16,35,34,39,67,66,71,16,35,39,40,67,71,72,16,37,36,42,69,68,74,16,37,42,43,69,74,75,16,41,40,46,73,72,78,16,41,46,47,73,78,79,16,43,42,48,75,74,80,16,43,48,49,75,80,81,16,47,46,52,79,78,84,16,47,52,53,79,84,85,16,49,48,54,81,80,86,16,49,54,55,81,86,87,16,53,52,58,85,84,90,16,53,58,59,85,90,91,16,56,55,60,88,87,92,16,56,60,61,88,92,93,16,57,56,61,89,88,93,16,57,61,62,89,93,94,16,58,57,62,90,89,94,16,58,62,63,90,94,95,18,6,5,11,12,38,37,43,44,18,7,6,12,13,39,38,44,45,18,8,7,13,14,40,39,45,46,18,12,11,17,18,44,43,49,50,18,13,12,18,19,45,44,50,51,18,14,13,19,20,46,45,51,52,18,18,17,23,24,50,49,55,56,18,19,18,24,25,51,50,56,57,18,20,19,25,26,52,51,57,58,18,38,37,43,44,70,69,75,76,18,39,38,44,45,71,70,76,77,18,40,39,45,46,72,71,77,78,18,44,43,49,50,76,75,81,82,18,45,44,50,51,77,76,82,83,18,46,45,51,52,78,77,83,84,18,50,49,55,56,82,81,87,88,18,51,50,56,57,83,82,88,89,18,52,51,57,58,84,83,89,90])
4423 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4424 d=DataArrayInt([0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,345,354,363,372,381,390,399,408,417,426,435,444,453,462,471,480,489,498])
4425 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4426 d=DataArrayInt([3,1,0,5,3,1,5,6,3,2,1,6,3,2,6,7,3,3,2,7,3,3,7,8,3,5,4,10,3,5,10,11,3,9,8,14,3,9,14,15,3,11,10,16,3,11,16,17,3,15,14,20,3,15,20,21,3,17,16,22,3,17,22,23,3,21,20,26,3,21,26,27,3,24,23,28,3,24,28,29,3,25,24,29,3,25,29,30,3,26,25,30,3,26,30,31,3,65,64,69,3,65,69,70,3,66,65,70,3,66,70,71,3,67,66,71,3,67,71,72,3,69,68,74,3,69,74,75,3,73,72,78,3,73,78,79,3,75,74,80,3,75,80,81,3,79,78,84,3,79,84,85,3,81,80,86,3,81,86,87,3,85,84,90,3,85,90,91,3,88,87,92,3,88,92,93,3,89,88,93,3,89,93,94,3,90,89,94,3,90,94,95,4,1,0,32,33,4,0,5,37,32,4,5,1,33,37,4,5,6,38,37,4,6,1,33,38,4,2,1,33,34,4,6,2,34,38,4,6,7,39,38,4,7,2,34,39,4,3,2,34,35,4,7,3,35,39,4,7,8,40,39,4,8,3,35,40,4,5,4,36,37,4,4,10,42,36,4,10,5,37,42,4,10,11,43,42,4,11,5,37,43,4,9,8,40,41,4,8,14,46,40,4,14,9,41,46,4,14,15,47,46,4,15,9,41,47,4,10,16,48,42,4,16,11,43,48,4,16,17,49,48,4,17,11,43,49,4,14,20,52,46,4,20,15,47,52,4,20,21,53,52,4,21,15,47,53,4,16,22,54,48,4,22,17,49,54,4,22,23,55,54,4,23,17,49,55,4,20,26,58,52,4,26,21,53,58,4,26,27,59,58,4,27,21,53,59,4,24,23,55,56,4,23,28,60,55,4,28,24,56,60,4,28,29,61,60,4,29,24,56,61,4,25,24,56,57,4,29,25,57,61,4,29,30,62,61,4,30,25,57,62,4,26,25,57,58,4,30,26,58,62,4,30,31,63,62,4,31,26,58,63,4,11,12,44,43,4,12,6,38,44,4,12,13,45,44,4,13,7,39,45,4,13,14,46,45,4,17,18,50,49,4,18,12,44,50,4,18,19,51,50,4,19,13,45,51,4,19,20,52,51,4,24,18,50,56,4,25,19,51,57,4,33,32,64,65,4,32,37,69,64,4,37,33,65,69,4,37,38,70,69,4,38,33,65,70,4,34,33,65,66,4,38,34,66,70,4,38,39,71,70,4,39,34,66,71,4,35,34,66,67,4,39,35,67,71,4,39,40,72,71,4,40,35,67,72,4,37,36,68,69,4,36,42,74,68,4,42,37,69,74,4,42,43,75,74,4,43,37,69,75,4,41,40,72,73,4,40,46,78,72,4,46,41,73,78,4,46,47,79,78,4,47,41,73,79,4,42,48,80,74,4,48,43,75,80,4,48,49,81,80,4,49,43,75,81,4,46,52,84,78,4,52,47,79,84,4,52,53,85,84,4,53,47,79,85,4,48,54,86,80,4,54,49,81,86,4,54,55,87,86,4,55,49,81,87,4,52,58,90,84,4,58,53,85,90,4,58,59,91,90,4,59,53,85,91,4,56,55,87,88,4,55,60,92,87,4,60,56,88,92,4,60,61,93,92,4,61,56,88,93,4,57,56,88,89,4,61,57,89,93,4,61,62,94,93,4,62,57,89,94,4,58,57,89,90,4,62,58,90,94,4,62,63,95,94,4,63,58,90,95,4,43,44,76,75,4,44,38,70,76,4,44,45,77,76,4,45,39,71,77,4,45,46,78,77,4,49,50,82,81,4,50,44,76,82,4,50,51,83,82,4,51,45,77,83,4,51,52,84,83,4,56,50,82,88,4,57,51,83,89,4,6,5,11,12,4,7,6,12,13,4,8,7,13,14,4,12,11,17,18,4,13,12,18,19,4,14,13,19,20,4,18,17,23,24,4,19,18,24,25,4,20,19,25,26,4,70,69,75,76,4,71,70,76,77,4,72,71,77,78,4,76,75,81,82,4,77,76,82,83,4,78,77,83,84,4,82,81,87,88,4,83,82,88,89,4,84,83,89,90])
4427 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4428 d=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,792,797,802,807,812,817,822,827,832,837,842,847,852,857,862,867,872,877,882,887,892,897,902,907,912,917,922])
4429 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4430 d=DataArrayInt([1,1,0,1,0,5,1,5,1,1,5,6,1,6,1,1,2,1,1,6,2,1,6,7,1,7,2,1,3,2,1,7,3,1,7,8,1,8,3,1,5,4,1,4,10,1,10,5,1,10,11,1,11,5,1,9,8,1,8,14,1,14,9,1,14,15,1,15,9,1,10,16,1,16,11,1,16,17,1,17,11,1,14,20,1,20,15,1,20,21,1,21,15,1,16,22,1,22,17,1,22,23,1,23,17,1,20,26,1,26,21,1,26,27,1,27,21,1,24,23,1,23,28,1,28,24,1,28,29,1,29,24,1,25,24,1,29,25,1,29,30,1,30,25,1,26,25,1,30,26,1,30,31,1,31,26,1,11,12,1,12,6,1,12,13,1,13,7,1,13,14,1,17,18,1,18,12,1,18,19,1,19,13,1,19,20,1,24,18,1,25,19,1,65,64,1,64,69,1,69,65,1,69,70,1,70,65,1,66,65,1,70,66,1,70,71,1,71,66,1,67,66,1,71,67,1,71,72,1,72,67,1,69,68,1,68,74,1,74,69,1,74,75,1,75,69,1,73,72,1,72,78,1,78,73,1,78,79,1,79,73,1,74,80,1,80,75,1,80,81,1,81,75,1,78,84,1,84,79,1,84,85,1,85,79,1,80,86,1,86,81,1,86,87,1,87,81,1,84,90,1,90,85,1,90,91,1,91,85,1,88,87,1,87,92,1,92,88,1,92,93,1,93,88,1,89,88,1,93,89,1,93,94,1,94,89,1,90,89,1,94,90,1,94,95,1,95,90,1,75,76,1,76,70,1,76,77,1,77,71,1,77,78,1,81,82,1,82,76,1,82,83,1,83,77,1,83,84,1,88,82,1,89,83])
4431 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4432 d=DataArrayInt(129) ; d.iota() ; d*=3
4433 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4435 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4436 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4437 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4438 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4439 self.assertTrue(mm3D.getGroupArr(-2,"grp1").isEqualWithoutConsideringStr(DataArrayInt([0,1,5,9,12,13,14,18,22,23,30,31,33,37,38,40,42,46,50,51])))
4440 self.assertTrue(mm3D.getGroupArr(-2,"grp1_top").isEqualWithoutConsideringStr(DataArrayInt([64,65,69,73,76,77,78,82,86,87,94,95,97,101,102,104,106,110,114,115])))
4441 self.assertTrue(mm3D.getGroupArr(0,"grp0_extruded").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,24,25,26,27,28,29,48,49,50,57,58,59])))
4442 self.assertTrue(mm3D.getGroupArr(-1,"grp1_extruded").isEqualWithoutConsideringStr(DataArrayInt([48,49,53,57,60,61,62,66,70,71,78,79,81,85,86,88,90,94,98,99,112,113,117,121,124,125,126,130,134,135,142,143,145,149,150,152,154,158,162,163])))
4443 mm3D.setName("MeshExtruded")
4444 mm3D.write(fileName,0)
4447 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4449 def testMEDFileUMeshPickeling1(self):
4450 outFileName="Pyfile86.med"
4451 c=DataArrayDouble([-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ],9,2)
4452 c.setInfoOnComponents(["aa","bbb"])
4453 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4454 m=MEDCouplingUMesh();
4455 m.setMeshDimension(2);
4457 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4458 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4459 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4460 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4461 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4462 m.finishInsertingCells();
4464 m.checkConsistencyLight()
4465 m1=MEDCouplingUMesh.New();
4466 m1.setMeshDimension(1);
4467 m1.allocateCells(3);
4468 m1.insertNextCell(NORM_SEG2,2,[1,4])
4469 m1.insertNextCell(NORM_SEG2,2,[3,6])
4470 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4471 m1.finishInsertingCells();
4473 m1.checkConsistencyLight()
4474 m2=MEDCouplingUMesh.New();
4475 m2.setMeshDimension(0);
4476 m2.allocateCells(4);
4477 m2.insertNextCell(NORM_POINT1,1,[1])
4478 m2.insertNextCell(NORM_POINT1,1,[3])
4479 m2.insertNextCell(NORM_POINT1,1,[2])
4480 m2.insertNextCell(NORM_POINT1,1,[6])
4481 m2.finishInsertingCells();
4483 m2.checkConsistencyLight()
4485 mm=MEDFileUMesh.New()
4486 self.assertTrue(mm.getUnivNameWrStatus())
4487 mm.setName("MyFirstMEDCouplingMEDmesh")
4488 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4492 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4494 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4495 # playing with groups
4496 g1_2=DataArrayInt.New()
4497 g1_2.setValues([1,3],2,1)
4499 g2_2=DataArrayInt.New()
4500 g2_2.setValues([1,2,3],3,1)
4502 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4503 g1_1=DataArrayInt.New()
4504 g1_1.setValues([0,1,2],3,1)
4506 g2_1=DataArrayInt.New()
4507 g2_1.setValues([0,2],2,1)
4509 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4510 g1_N=DataArrayInt.New()
4511 g1_N.setValues(list(range(8)),8,1)
4513 g2_N=DataArrayInt.New()
4514 g2_N.setValues(list(range(9)),9,1)
4516 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4517 mm.createGroupOnAll(0,"GrpOnAllCell")
4518 # check content of mm
4519 t=mm.getGroupArr(0,"G1",False)
4520 self.assertTrue(g1_2.isEqual(t));
4521 t=mm.getGroupArr(0,"G2",False)
4522 self.assertTrue(g2_2.isEqual(t));
4523 t=mm.getGroupArr(-1,"G1",False)
4524 self.assertTrue(g1_1.isEqual(t));
4525 t=mm.getGroupArr(-1,"G2",False)
4526 self.assertTrue(g2_1.isEqual(t));
4527 t=mm.getGroupArr(1,"G1",False)
4528 self.assertTrue(g1_N.isEqual(t));
4529 t=mm.getGroupArr(1,"G2",False)
4530 self.assertTrue(g2_N.isEqual(t));
4531 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4532 t=mm.getGroupArr(0,"GrpOnAllCell")
4534 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4535 mm2=pickle.loads(st)
4536 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4537 self.assertEqual(mm.getAxisType(),AX_CART)
4539 mm.setAxisType(AX_CYL)
4540 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4541 mm2=pickle.loads(st)
4542 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4543 self.assertEqual(mm2.getAxisType(),AX_CYL)
4547 def testMEDFileFieldsLoadSpecificEntities1(self):
4550 fileName="Pyfile87.med"
4554 m=MEDCouplingCMesh()
4555 arr=DataArrayDouble(nbNodes) ; arr.iota()
4557 m=m.buildUnstructured()
4560 fmts=MEDFileFieldMultiTS()
4561 for i in range(nbPdt):
4562 f=MEDCouplingFieldDouble(ON_NODES)
4564 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4566 f.setName(fieldName)
4567 f.setTime(float(i),i,0)
4568 fmts.appendFieldNoProfileSBT(f)
4571 mm=MEDFileUMesh() ; mm[0]=m
4572 fmts.write(fileName,2)
4573 mm.write(fileName,0)
4575 fs=MEDFileFields(fileName,False)
4576 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4577 fs.loadArraysIfNecessary()
4578 fs2.loadArraysIfNecessary()
4579 for i in range(nbPdt):
4580 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4582 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4583 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4584 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4585 fmts=MEDFileFieldMultiTS()
4586 for i in range(nbPdt):
4587 f=MEDCouplingFieldDouble(ON_CELLS)
4589 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4591 f.setName(fieldName)
4592 f.setTime(float(i),i,0)
4593 fmts.appendFieldNoProfileSBT(f)
4595 mm=MEDFileUMesh() ; mm[0]=m3
4597 self.assertEqual(mm.getNonEmptyLevels(),())
4599 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4600 fmts.write(fileName,2)
4601 fs=MEDFileFields(fileName,False)
4602 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4603 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4604 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4605 fs.loadArraysIfNecessary()
4606 fs2.loadArraysIfNecessary()
4607 fs3.loadArraysIfNecessary()
4608 fs4.loadArraysIfNecessary()
4609 for i in range(nbPdt):
4610 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4611 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4612 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4617 def testMEDFileLotsOfTSRW1(self):
4620 fileName="Pyfile88.med"
4621 nbPdt=300 # <- perftest = 30000
4624 maxPdt=100 # <- optimum = 500
4625 m=MEDCouplingCMesh()
4626 arr=DataArrayDouble(nbNodes) ; arr.iota()
4628 m=m.buildUnstructured()
4631 nbOfField=nbPdt//maxPdt
4633 for j in range(nbOfField):
4634 fmts=MEDFileFieldMultiTS()
4635 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4636 for i in range(s.start, s.stop, s.step):
4637 f=MEDCouplingFieldDouble(ON_NODES)
4639 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4641 f.setName("%s_%d"%(fieldName,j))
4642 f.setTime(float(i),i,0)
4643 fmts.appendFieldNoProfileSBT(f)
4648 mm=MEDFileUMesh() ; mm[0]=m
4649 fs.write(fileName,2)
4650 mm.write(fileName,0)
4652 def appendInDict(d,key,val):
4659 allFields=GetAllFieldNames(fileName)
4661 pat=re.compile("([\d]+)([\s\S]+)$")
4662 for st in allFields:
4666 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4669 appendInDict(allFieldsDict,st,'')
4673 for k in allFieldsDict:
4674 if allFieldsDict[k]!=['']:
4675 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4678 for it in allFieldsDict[k]:
4679 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4684 for ii in range(nbIter):
4685 zeResu.pushBackTimeSteps(fmts2.pop())
4688 fs2.pushField(zeResu)
4690 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4694 def testMEDFileMeshRearrangeFamIds1(self):
4695 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4696 fileName="Pyfile89.med"
4697 meshName='Maillage_2'
4699 coords=DataArrayDouble([(0.,0.,0.),(0.,0.,200.),(0.,200.,200.),(0.,200.,0.),(200.,0.,0.),(200.,0.,200.),(200.,200.,200.),(200.,200.,0.),(0.,0.,100.),(0.,100.,200.),(0.,200.,100.),(0.,100.,0.),(200.,0.,100.),(200.,100.,200.),(200.,200.,100.),(200.,100.,0.),(100.,0.,0.),(100.,0.,200.),(100.,200.,0.),(100.,200.,200.),(0.,116.87743909766768,83.12256090233232),(200.,116.87743909766768,83.12256090233232),(116.87743909766769,0.,116.87743909766769),(116.87743909766769,200.,116.87743909766769),(116.87743909766769,116.87743909766769,0.),(116.87743909766769,116.87743909766769,200.),(63.3851584383713,56.1391811199829,119.728314479261),(138.008709441123,116.039297556044,119.903790959468)])
4701 c0=DataArrayInt([14,1,26,9,8,14,17,26,1,8,14,27,26,17,22,14,26,16,20,8,14,8,0,16,11,14,16,20,11,24,14,25,20,26,27,14,22,26,24,27,14,26,16,22,24,14,8,26,22,17,14,20,9,25,26,14,19,20,25,23,14,23,6,27,25,14,19,23,10,20,14,27,22,21,24,14,27,21,14,18,14,26,9,25,17,14,13,27,25,17,14,27,18,24,21,14,22,21,15,12,14,27,20,24,18,14,23,25,27,20,14,13,27,6,25,14,23,27,6,14,14,15,16,22,12,14,27,17,13,22,14,22,27,21,13,14,24,16,22,15,14,24,18,7,21,14,12,4,15,16,14,22,12,5,13,14,8,26,16,22,14,13,27,21,14,14,20,18,10,3,14,14,27,18,23,14,14,27,6,13,14,21,22,13,12,14,25,26,17,27,14,19,9,25,20,14,26,24,20,16,14,22,24,15,21,14,9,26,1,17,14,23,27,18,20,14,20,11,18,3,14,14,18,21,7,14,19,2,9,10,14,19,23,25,6,14,18,23,20,10,14,20,26,8,9,14,22,13,5,17,14,24,11,18,20,14,21,15,7,24,14,19,20,10,9,14,20,26,27,24,14,16,8,11,20])
4702 c0i=DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275])
4703 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4704 m0.setConnectivity(c0,c0i)
4707 c1=DataArrayInt([3,8,20,11,3,8,9,20,3,9,2,10,3,20,9,10,3,0,8,11,3,9,8,1,3,20,10,3,3,11,20,3,3,15,21,12,3,5,12,13,3,21,13,12,3,15,12,4,3,14,6,13,3,14,13,21,3,7,14,21,3,7,21,15,3,5,22,12,3,4,12,16,3,17,1,8,3,16,8,0,3,5,17,22,3,12,22,16,3,22,17,8,3,16,22,8,3,10,2,19,3,7,18,14,3,14,23,6,3,3,10,18,3,23,19,6,3,18,23,14,3,10,19,23,3,10,23,18,3,3,18,11,3,7,24,18,3,15,4,16,3,11,16,0,3,7,15,24,3,18,24,11,3,24,15,16,3,11,24,16,3,9,19,2,3,19,25,6,3,17,5,13,3,1,17,9,3,25,13,6,3,9,25,19,3,17,13,25,3,17,25,9])
4708 c1i=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192])
4709 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4710 m1.setConnectivity(c1,c1i)
4713 c2=DataArrayInt([0,8,8,1,1,9,9,2,3,10,10,2,0,11,11,3,4,12,12,5,5,13,13,6,7,14,14,6,4,15,15,7,0,16,16,4,1,17,17,5,3,18,18,7,2,19,19,6])
4714 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4715 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4716 mm[-2]=m2.buildUnstructured()
4718 ref0=DataArrayInt(55) ; ref0[:]=0
4719 mm.setFamilyFieldArr(0,ref0)
4720 mm.setFamilyFieldArr(1,DataArrayInt([0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
4721 ref1=DataArrayInt([0,0,0,0,0,0,0,0,-6,-6,-6,-6,-6,-6,-6,-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4722 mm.setFamilyFieldArr(-1,ref1)
4723 ref2=DataArrayInt([0,0,-7,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4724 mm.setFamilyFieldArr(-2,ref2)
4726 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4727 mm.setFamilyId(f,fid)
4728 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4729 mm.setFamiliesOnGroup(grp,fams)
4730 mm.write(fileName,2)
4732 mm=MEDFileMesh.New(fileName)
4733 grp=mm.getGroup(-1,"Groupe_1")
4734 dai=grp.computeFetchedNodeIds()
4737 mm.rearrangeFamilies() # <- the aim of the test
4738 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4739 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4740 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4741 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4742 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([0,0,2,0,9,9,9,9,0,0,0,0,9,9,9,9,0,0,0,0,0,9,0,0,0,0,0,0])))
4743 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4744 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4745 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4746 for elt,fams in allGrps:
4747 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4748 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4749 for elt,eltId in allFams:
4750 self.assertEqual(mm.getFamilyId(elt),eltId)
4754 def testNonRegrCMeshSetFieldPfl1(self):
4755 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4756 ff=MEDFileField1TS()
4759 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4763 field=MEDCouplingFieldDouble(ON_CELLS)
4765 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4766 field.setName("Field")
4767 field.checkConsistencyLight()
4768 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4769 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4770 self.assertEqual(ff.getPfls(),())
4771 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4772 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4773 del ff,mm,field,field2,pfl
4774 # same with unstructured mesh
4775 ff=MEDFileField1TS()
4778 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4781 m=m.buildUnstructured()
4783 field=MEDCouplingFieldDouble(ON_CELLS)
4785 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4786 field.setName("Field")
4787 field.checkConsistencyLight()
4788 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4789 ff.setFieldProfile(field,mm,0,pfl)
4790 self.assertEqual(ff.getPfls(),())
4791 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4792 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4796 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4798 fileName="Pyfile90.med"
4799 fileName2="Pyfile91.med"
4800 arr=DataArrayDouble(5) ; arr.iota()
4801 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4802 m=m.buildUnstructured()
4803 d=DataArrayInt([3,7,11,15])
4806 m2=m[d.buildComplement(m.getNumberOfCells())]
4807 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4808 m.changeSpaceDimension(3,0.)
4809 arr=DataArrayDouble(3) ; arr.iota()
4810 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4811 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4812 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4813 m3D=m.buildExtrudedMesh(m1D,0)
4814 m3D.sortCellsInMEDFileFrmt()
4815 m3D.setName(meshName)
4816 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4817 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4818 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4821 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4822 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4823 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4824 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4825 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4826 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4827 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4828 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4829 mm.setGroupsAtLevel(0,[vol1,vol2])
4830 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4831 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4833 mmOut1=mm.linearToQuadratic(0,0.)
4834 mmOut1.write(fileName2,2)
4835 mmOut2=mmOut1.quadraticToLinear(0.)
4836 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4840 def testMEDFileMeshAddGroup1(self):
4841 m=MEDCouplingCMesh()
4842 arrX=DataArrayDouble(9) ; arrX.iota()
4843 arrY=DataArrayDouble(4) ; arrY.iota()
4844 m.setCoords(arrX,arrY)
4848 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4850 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4852 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4854 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4856 for grp in [grp0,grp1,grp2,grp3]:
4857 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4858 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4860 for grp in [grp0,grp1,grp2,grp3]:
4861 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4862 mm.addGroup(1,grpNode)
4863 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4864 for grp in [grp0,grp1,grp2,grp3]:
4865 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4866 for grp in [grp0,grp1,grp2,grp3]:
4867 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4868 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4869 mm.normalizeFamIdsMEDFile()
4870 for grp in [grp0,grp1,grp2,grp3]:
4871 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4872 for grp in [grp0,grp1,grp2,grp3]:
4873 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4874 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4878 def testMEDFileJoint1(self):
4879 fileName="Pyfile92.med"
4880 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4881 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4885 mm.setDescription("un maillage")
4886 mm.write(fileName,2)
4887 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4888 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4889 one_step_joint=MEDFileJointOneStep()
4890 one_step_joint.pushCorrespondence(cell_correspond)
4891 one_step_joint.pushCorrespondence(node_correspond)
4892 one_joint=MEDFileJoint()
4893 one_joint.pushStep(one_step_joint)
4894 one_joint.setLocalMeshName("maa1")
4895 one_joint.setRemoteMeshName("maa1")
4896 one_joint.setDescription("joint_description")
4897 one_joint.setJointName("joint_1")
4898 one_joint.setDomainNumber(1)
4899 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4900 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4901 self.assertEqual( one_joint.getDescription(), "joint_description")
4902 self.assertEqual( one_joint.getJointName(), "joint_1")
4903 self.assertEqual( one_joint.getDomainNumber(), 1)
4904 joints=MEDFileJoints()
4905 joints.pushJoint(one_joint);
4906 joints.write(fileName,0)
4908 jointsR=MEDFileJoints(fileName,mm.getName())
4909 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4910 jR = jointsR.getJointAtPos(0)
4911 self.assertTrue( jR.isEqual( one_joint ))
4912 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4913 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4914 jointsR.destroyJointAtPos(0)
4918 def testMEDFileJoint2(self):
4919 fileNameWr="Pyfile93.med"
4920 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4921 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4925 mm.setDescription("un maillage")
4926 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4927 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4928 one_step_joint=MEDFileJointOneStep()
4929 two_step_joint=MEDFileJointOneStep()
4930 one_joint=MEDFileJoint()
4931 two_joint=MEDFileJoint()
4932 one_step_joint.pushCorrespondence(node_correspond)
4933 one_joint.pushStep(one_step_joint)
4934 two_step_joint.pushCorrespondence(cell_correspond)
4935 two_step_joint.pushCorrespondence(node_correspond)
4936 two_joint.pushStep(two_step_joint)
4937 one_joint.setLocalMeshName("maa1")
4938 one_joint.setRemoteMeshName("maa1")
4939 one_joint.setDescription("joint_description_1")
4940 one_joint.setJointName("joint_1")
4941 one_joint.setDomainNumber(1)
4942 two_joint.setLocalMeshName("maa1")
4943 two_joint.setRemoteMeshName("maa1")
4944 two_joint.setDescription("joint_description_2")
4945 two_joint.setJointName("joint_2")
4946 two_joint.setDomainNumber(2)
4947 joints=MEDFileJoints()
4948 joints.pushJoint(one_joint)
4949 joints.pushJoint(two_joint)
4950 mm.setJoints( joints )
4951 mm.write(fileNameWr,2)
4953 mm=MEDFileMesh.New(fileNameWr)
4954 self.assertEqual( mm.getNumberOfJoints(), 2)
4955 jointsR = mm.getJoints();
4956 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4957 self.assertEqual( len( jointsR ), 2 )
4958 jointR1 = jointsR[0]
4959 jointR2 = jointsR[1]
4960 self.assertFalse( jointR1 is None )
4961 self.assertFalse( jointR2 is None )
4962 self.assertTrue( jointR1.isEqual( one_joint ))
4963 self.assertTrue( jointR2.isEqual( two_joint ))
4967 def testMEDFileJoint1(self):
4968 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4969 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4970 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4971 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4972 joint1st_1=MEDFileJointOneStep()
4973 joint1st_1.pushCorrespondence(cell_correspond)
4974 joint1st_1.pushCorrespondence(node_correspond)
4975 joint1st_2=MEDFileJointOneStep()
4976 joint1st_2.pushCorrespondence(cell_correspond)
4977 joint1st_2.pushCorrespondence(node_correspond)
4978 joint1st_3=MEDFileJointOneStep()
4979 joint1st_3.pushCorrespondence(node_correspond)
4980 joint1st_3.pushCorrespondence(cell_correspond)
4981 joint1st_4=MEDFileJointOneStep()
4982 joint1st_4.pushCorrespondence(cell_correspond)
4983 joint1st_5=MEDFileJointOneStep()
4984 joint1st_5.pushCorrespondence(cell_correspon2)
4985 joint1st_6=MEDFileJointOneStep()
4986 joint1st_6.pushCorrespondence(cell_correspon3)
4987 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4988 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4989 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4990 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4991 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4992 one_joint=MEDFileJoint()
4993 one_joint.pushStep(joint1st_1)
4994 one_joint.setLocalMeshName("maa1")
4995 one_joint.setRemoteMeshName("maa2")
4996 one_joint.setDescription("joint_description")
4997 one_joint.setJointName("joint_1")
4998 one_joint.setDomainNumber(1)
4999 self.assertEqual( "maa1", one_joint.getLocalMeshName())
5000 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5001 self.assertEqual( "joint_description", one_joint.getDescription())
5002 self.assertEqual( 1, one_joint.getDomainNumber())
5003 self.assertEqual( "joint_1", one_joint.getJointName())
5006 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5008 def testMEDFileSafeCall0(self):
5009 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5010 fname="Pyfile94.med"
5011 errfname="Pyfile94.err"
5014 # first clean file if needed
5015 if os.path.exists(fname):
5018 # second : build a file from scratch
5019 m=MEDCouplingCMesh()
5020 arr=DataArrayDouble(11) ; arr.iota()
5021 m.setCoords(arr,arr)
5026 # third : change permissions to remove write access on created file
5027 os.chmod(fname, 0o444)
5028 # four : try to append data on file -> check that it raises Exception
5029 f=MEDCouplingFieldDouble(ON_CELLS)
5032 f.setArray(DataArrayDouble(100))
5033 f.getArray()[:]=100.
5034 f.checkConsistencyLight()
5035 f1ts=MEDFileField1TS()
5036 f1ts.setFieldNoProfileSBT(f)
5038 tmp=StdOutRedirect(errfname)
5039 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5042 if os.path.exists(errfname):
5048 def testUnivStatus1(self):
5049 """ Non regression test to check the effectiveness of univ write status."""
5050 fname="Pyfile95.med"
5051 arr=DataArrayDouble(10) ; arr.iota()
5052 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5053 mm=MEDFileCMesh() ; mm.setMesh(m)
5054 mm.setUnivNameWrStatus(False) # test is here
5056 mm=MEDFileCMesh(fname)
5057 self.assertEqual(mm.getUnivName(),"")
5058 mm.setUnivNameWrStatus(True)
5060 mm=MEDFileCMesh(fname)
5061 self.assertTrue(mm.getUnivName()!="")
5065 def testEmptyMesh(self):
5066 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5068 fname = "Pyfile96.med"
5069 m = MEDCouplingUMesh('toto', 2)
5070 m.setCoords(DataArrayDouble([], 0, 2))
5071 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5072 mfu = MEDFileUMesh()
5073 mfu.setMeshAtLevel(0, m)
5075 mfu2 = MEDFileUMesh(fname)
5076 self.assertEqual('toto', mfu2.getName())
5077 lvl = mfu2.getNonEmptyLevels()
5078 self.assertEqual((), lvl)
5080 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5081 def testMEDFileUMeshPickeling2(self):
5082 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5088 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5089 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5090 mesh=MEDFileUMesh() ; mesh[0]=m
5091 m1=m.computeSkin() ; mesh[-1]=m1
5093 bary1=m1.computeCellCenterOfMass()[:,2]
5094 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5095 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5096 mesh.setGroupsAtLevel(-1,[grp1,grp2])
5098 st=pickle.dumps(mesh,2)
5100 st2=pickle.dumps(mm,2)
5101 mm2=pickle.loads(st2)
5102 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5106 def testMEDFileEquivalence1(self):
5107 """ First check of equivalence implementation in MEDFileMesh"""
5108 fileName="Pyfile97.med"
5111 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)])
5112 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5113 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])
5114 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5115 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])
5116 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5117 mm.getFamilyFieldAtLevel(-1)[:]=-2
5118 mm.getFamilyFieldAtLevel(0)[:]=0
5119 mm.addFamily("HOMARD________-1",-1)
5120 mm.addFamily("HOMARD________-2",-2)
5121 mm.addFamily("HOMARD________-3",-3)
5122 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5124 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5125 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."
5126 mm.initializeEquivalences()
5127 eqs=mm.getEquivalences()
5128 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5129 eq0.setDescription(descEq)
5130 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)])
5131 eq0.setArray(-1,corr)
5132 self.assertEqual(eq0.getCell().size(),1)
5133 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5134 eq0.getCell().clear()
5135 self.assertEqual(eq0.getCell().size(),0)
5136 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5137 self.assertEqual(eq0.getCell().size(),1)
5138 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5139 mm.killEquivalences()
5140 mm.initializeEquivalences()
5141 eqs=mm.getEquivalences()
5142 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5143 eq0.setDescription(descEq)
5145 c.setArrayForType(NORM_QUAD4,corr)
5146 self.assertEqual(eq0.getCell().size(),1)
5147 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5149 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5150 self.assertEqual(mm2.getEquivalences().size(),1)
5151 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5152 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5153 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5154 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5155 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5156 mm.write(fileName,2)
5158 mm3=MEDFileMesh.New(fileName)
5159 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5163 def testMEDFileForFamiliesPlayer1(self):
5164 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5165 fileName="Pyfile98.med"
5167 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5168 arr=DataArrayDouble(4) ; arr.iota()
5169 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5170 m=m.buildUnstructured()
5173 mm.setName(meshName)
5174 mm.setFamilyId("FAMILLE_ZERO",0)
5175 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5176 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5177 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5178 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5179 mm.setFamilyFieldArr(1,d)
5180 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5181 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5182 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5183 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5184 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5185 mm.write(fileName,2)
5186 # now read such funny file !
5187 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5188 self.assertTrue(mm.isEqual(mm2,1e-16))
5189 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5190 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5191 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5195 def testCartesianizer1(self):
5196 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5198 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5199 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5200 d0=DataArrayInt(16) ; d0[:]=0
5201 d1=DataArrayInt(9) ; d1[:]=0
5202 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5203 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5204 ref0=mm.getCoords().getHiddenCppPointer()
5205 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5206 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5207 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5208 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5209 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5210 mm.setAxisType(AX_CYL) #<- important
5211 mm2=mm.cartesianize() # the trigger
5212 self.assertEqual(mm2.getAxisType(),AX_CART)
5213 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5214 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5215 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5216 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5217 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5218 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5219 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5220 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5221 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5222 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5223 self.assertEqual(mm2.getName(),mm.getName())
5224 self.assertEqual(mm2.getDescription(),mm.getDescription())
5225 self.assertEqual(mm2.getTime(),mm.getTime())
5226 self.assertEqual(mm2.getTime(),mm.getTime())
5227 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5228 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5229 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5230 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5231 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5232 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5233 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5234 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5236 mm.setAxisType(AX_CART)
5237 mm2=mm.cartesianize() # the trigger
5238 self.assertEqual(mm2.getAxisType(),AX_CART)
5239 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5240 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5241 # CurveLinearMesh non cart
5242 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5243 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5244 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5245 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5246 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5247 mm2=mm.cartesianize() # the trigger
5248 self.assertEqual(mm2.getAxisType(),AX_CART)
5249 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5250 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5251 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5252 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5253 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5254 self.assertEqual(mm2.getName(),mm.getName())
5255 self.assertEqual(mm2.getDescription(),mm.getDescription())
5256 self.assertEqual(mm2.getTime(),mm.getTime())
5257 self.assertEqual(mm2.getTime(),mm.getTime())
5258 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5259 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5260 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5261 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5262 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5263 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5264 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5265 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5266 # CurveLinearMesh cart
5267 mm.setAxisType(AX_CART)
5268 mm2=mm.cartesianize() # the trigger
5269 self.assertEqual(mm2.getAxisType(),AX_CART)
5270 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5271 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5273 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5274 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5275 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5276 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5277 mm2=mm.cartesianize() # the trigger
5278 self.assertEqual(mm2.getAxisType(),AX_CART)
5279 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5280 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5281 self.assertEqual(mm2.getName(),mm.getName())
5282 self.assertEqual(mm2.getDescription(),mm.getDescription())
5283 self.assertEqual(mm2.getTime(),mm.getTime())
5284 self.assertEqual(mm2.getTime(),mm.getTime())
5285 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5286 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5287 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5288 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5289 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5290 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5291 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5292 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5294 mm.setAxisType(AX_CART)
5295 mm2=mm.cartesianize() # the trigger
5296 self.assertEqual(mm2.getAxisType(),AX_CART)
5297 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5298 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5302 def testCheckCoherency(self):
5303 m2 = MEDCouplingUMesh("2d", 2)
5304 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5305 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5306 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5307 mum = MEDFileUMesh()
5308 mum.setMeshAtLevel(0, m2)
5309 mum.setMeshAtLevel(-1, m1)
5310 mum.checkConsistency()
5311 mum2 = mum.deepCopy()
5314 arr = DataArrayInt([2]*4)
5315 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5316 self.assertRaises(InterpKernelException, mum.checkConsistency)
5317 mum=mum2; mum2=mum.deepCopy();
5318 arr = DataArrayInt([2]*4)
5319 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5320 self.assertRaises(InterpKernelException, mum.checkConsistency)
5321 mum=mum2; mum2=mum.deepCopy();
5322 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5323 self.assertRaises(InterpKernelException, mum.checkConsistency)
5324 mum=mum2; mum2=mum.deepCopy();
5325 arr = DataArrayAsciiChar(['tutu x']*4)
5326 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5327 self.assertRaises(InterpKernelException, mum.checkConsistency)
5330 mum=mum2; mum2=mum.deepCopy();
5331 arr = DataArrayInt([2]*2)
5332 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5333 self.assertRaises(InterpKernelException, mum.checkConsistency)
5334 mum=mum2; mum2=mum.deepCopy();
5335 arr = DataArrayInt([2]*2)
5336 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5337 self.assertRaises(InterpKernelException, mum.checkConsistency)
5338 mum=mum2; mum2=mum.deepCopy();
5339 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5340 self.assertRaises(InterpKernelException, mum.checkConsistency)
5341 mum=mum2; mum2=mum.deepCopy();
5342 arr = DataArrayAsciiChar(['tutu x']*2)
5343 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5344 self.assertRaises(InterpKernelException, mum.checkConsistency)
5347 mum=mum2; mum2=mum.deepCopy();
5348 arr = DataArrayInt([2]*5)
5349 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5350 self.assertRaises(InterpKernelException, mum.checkConsistency)
5351 mum=mum2; mum2=mum.deepCopy();
5352 arr = DataArrayInt([2]*5)
5353 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5354 self.assertRaises(InterpKernelException, mum.checkConsistency)
5355 mum=mum2; mum2=mum.deepCopy();
5356 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5357 self.assertRaises(InterpKernelException, mum.checkConsistency)
5358 mum=mum2; mum2=mum.deepCopy();
5359 arr = DataArrayAsciiChar(['tutu x']*5)
5360 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5361 self.assertRaises(InterpKernelException, mum.checkConsistency)
5364 def testCheckSMESHConsistency(self):
5365 m2 = MEDCouplingUMesh("2d", 2)
5366 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5367 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5368 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5369 mum = MEDFileUMesh()
5370 mum.setMeshAtLevel(0, m2)
5371 mum.setMeshAtLevel(-1, m1)
5372 mum.checkConsistency()
5373 mum.checkSMESHConsistency()
5374 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5375 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5376 mum.setRenumFieldArr(0, n2)
5377 mum.setRenumFieldArr(-1, n1)
5378 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5379 mum.setRenumFieldArr(-1, n1+100)
5380 mum.checkSMESHConsistency()
5384 def testClearNodeAndCellNumbers(self):
5385 m2 = MEDCouplingUMesh("2d", 2)
5386 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5387 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5388 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5389 mum = MEDFileUMesh()
5390 mum.setMeshAtLevel(0, m2)
5391 mum.setMeshAtLevel(-1, m1)
5392 mum.checkConsistency()
5393 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5394 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5395 mum.setRenumFieldArr(0, n2)
5396 mum.setRenumFieldArr(-1, n1)
5397 mum.clearNodeAndCellNumbers()
5398 mum.checkSMESHConsistency()
5402 def testCMeshSetFamilyFieldArrNull(self):
5404 fname="Pyfile99.med"
5405 arrX=DataArrayDouble([0,1,2,3])
5406 arrY=DataArrayDouble([0,1,2])
5407 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5408 mm=MEDFileCMesh() ; mm.setMesh(m)
5409 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5410 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5411 mm.setFamilyFieldArr(0,famCellIds)
5412 mm.setFamilyFieldArr(1,famNodeIds)
5414 mm=MEDFileMesh.New(fname)
5415 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5416 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5417 mm.setFamilyFieldArr(0,None)#<- bug was here
5418 mm.setFamilyFieldArr(1,None)#<- bug was here
5419 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5420 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5422 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5423 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5425 mm2=MEDFileMesh.New(fname)
5426 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5427 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5431 def testAppendFieldProfileOnIntField(self):
5432 fname="Pyfile100.med"
5433 arrX=DataArrayDouble([0,1,2,3])
5434 arrY=DataArrayDouble([0,1,2])
5435 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5439 fmts=MEDFileIntFieldMultiTS()
5441 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5442 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5443 fieldName="FieldOnCell"
5444 f.setTime(1.2,1,1) ; f.setName(fieldName)
5445 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5446 fmts.appendFieldProfile(f,mm,0,pfl)
5451 mm=MEDFileMesh.New(fname)
5452 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5453 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5454 self.assertEqual(fmts.getName(),fieldName)
5455 self.assertEqual(len(fmts),1)
5457 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5458 self.assertEqual(pfltest.getName(),pflName)
5459 self.assertEqual(ftest.getName(),fieldName)
5460 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5461 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5462 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5463 self.assertEqual(ftest2.getTime(),f.getTime())
5464 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5468 def testMEDFileFieldEasyField1(self):
5469 """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."""
5470 ## Basic test on cells on top level
5471 fname="Pyfile101.med"
5474 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5475 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5477 m.insertNextCell(NORM_TRI3,[0,1,2])
5478 m.insertNextCell(NORM_TRI3,[3,4,5])
5479 m.insertNextCell(NORM_TRI3,[6,7,8])
5480 m.insertNextCell(NORM_TRI3,[9,10,11])
5481 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5482 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5485 arr0=DataArrayDouble([10,11,12,13,100,101])
5486 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5487 f.setName(fieldName) ; f.setTime(2.,6,7)
5489 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5491 arr2=arr0+1000 ; f.setArray(arr2)
5492 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5496 mm=MEDFileMesh.New(fname)
5497 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5498 ftst0=f1ts.field(mm)
5499 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5500 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5501 ftst1=f1ts.field(mm)
5502 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5503 fmts=MEDFileFieldMultiTS(fname,fieldName)
5504 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5505 ## Basic test on nodes on top level
5506 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5507 f2.setName(fieldName)
5509 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5511 mm=MEDFileMesh.New(fname)
5512 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5513 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5514 fmts=MEDFileFieldMultiTS(fname,fieldName)
5515 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5517 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)
5518 f3.setName(fieldName) ; f3.checkConsistencyLight()
5519 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5521 mm=MEDFileMesh.New(fname)
5522 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5523 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5525 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5526 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])
5527 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)
5528 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)
5529 f4.checkConsistencyLight()
5530 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5532 mm=MEDFileMesh.New(fname)
5533 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5534 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5538 def testMEDFileFieldEasyField2(self):
5539 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5540 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."""
5541 ## Basic test on cells on top level
5542 fname="Pyfile102.med"
5545 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5546 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5548 m.insertNextCell(NORM_TRI3,[0,1,2])
5549 m.insertNextCell(NORM_TRI3,[3,4,5])
5550 m.insertNextCell(NORM_TRI3,[6,7,8])
5551 m.insertNextCell(NORM_TRI3,[9,10,11])
5552 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5553 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5556 arr0=DataArrayInt32([10,11,12,13,100,101])
5557 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5558 f.setName(fieldName) ; f.setTime(2.,6,7)
5560 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5562 arr2=arr0+1000 ; f.setArray(arr2)
5563 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5567 mm=MEDFileMesh.New(fname)
5568 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5569 ftst0=f1ts.field(mm)
5570 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5571 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5572 ftst1=f1ts.field(mm)
5573 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5574 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5575 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5576 ## Basic test on nodes on top level
5577 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5578 f2.setName(fieldName)
5580 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5582 mm=MEDFileMesh.New(fname)
5583 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5584 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5585 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5586 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5588 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)
5589 f3.setName(fieldName) ; f3.checkConsistencyLight()
5590 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5592 mm=MEDFileMesh.New(fname)
5593 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5594 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5596 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5597 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])
5598 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)
5599 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)
5600 f4.checkConsistencyLight()
5601 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5603 mm=MEDFileMesh.New(fname)
5604 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5605 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5609 def testMEDFileFieldEasyField3(self):
5610 """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."""
5611 fname="Pyfile103.med"
5614 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5615 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5617 m.insertNextCell(NORM_TRI3,[0,1,2])
5618 m.insertNextCell(NORM_TRI3,[3,4,5])
5619 m.insertNextCell(NORM_TRI3,[6,7,8])
5620 m.insertNextCell(NORM_TRI3,[9,10,11])
5621 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5622 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5624 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5626 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5627 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5631 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5632 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5634 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5635 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5636 # here f1 lying on level -1 not 0 check if "field" method detect it !
5637 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5638 f1.setMesh(mm[-1]) # -1 is very important
5640 f1.checkConsistencyLight()
5642 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5644 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5645 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5647 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5648 f3.setMesh(mm[-1]) # this line is important
5649 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)
5650 f3.setName(fieldName) ; f3.checkConsistencyLight()
5651 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5653 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5654 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5656 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5657 f4.setMesh(mm[-1]) # this line is important
5658 f4.setName(fieldName)
5659 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])
5660 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)
5661 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)
5662 f4.checkConsistencyLight()
5663 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5664 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5665 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5669 def testMEDFileFieldEasyField4(self):
5670 """ Same than testMEDFileFieldEasyField3 but with integers"""
5671 fname="Pyfile104.med"
5674 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5675 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5677 m.insertNextCell(NORM_TRI3,[0,1,2])
5678 m.insertNextCell(NORM_TRI3,[3,4,5])
5679 m.insertNextCell(NORM_TRI3,[6,7,8])
5680 m.insertNextCell(NORM_TRI3,[9,10,11])
5681 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5682 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5684 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5686 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5687 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5691 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5692 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5694 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5695 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5696 # here f1 lying on level -1 not 0 check if "field" method detect it !
5697 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5698 f1.setMesh(mm[-1]) # -1 is very important
5700 f1.checkConsistencyLight()
5702 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5704 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5705 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5707 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5708 f3.setMesh(mm[-1]) # this line is important
5709 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)
5710 f3.setName(fieldName) ; f3.checkConsistencyLight()
5711 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5713 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5714 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5716 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5717 f4.setMesh(mm[-1]) # this line is important
5718 f4.setName(fieldName)
5719 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])
5720 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)
5721 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)
5722 f4.checkConsistencyLight()
5723 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5724 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5725 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5729 def testMEDFileFieldEasyField5(self):
5730 """More and more difficult now look at how profiles are managed by "field" method."""
5731 fname="Pyfile105.med"
5734 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5735 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5737 m.insertNextCell(NORM_TRI3,[0,1,2])
5738 m.insertNextCell(NORM_TRI3,[3,4,5])
5739 m.insertNextCell(NORM_TRI3,[6,7,8])
5740 m.insertNextCell(NORM_TRI3,[9,10,11])
5741 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5742 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5745 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5746 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5748 arr0=DataArrayDouble([10,11,12,13])
5749 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5750 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5751 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5754 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5755 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5756 # more complicated -> multi level
5757 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5759 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5760 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5762 mm2[0]=m0 ; mm2[-1]=m
5764 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5766 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5767 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5771 def testExtractPart1(self):
5772 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)])
5774 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5775 m0.insertNextCell(NORM_TRI3,[8,4,3])
5776 m0.insertNextCell(NORM_TRI3,[8,9,4])
5777 m0.insertNextCell(NORM_TRI3,[7,13,8])
5778 m0.insertNextCell(NORM_TRI3,[7,12,13])
5779 m0.insertNextCell(NORM_TRI3,[0,6,1])
5780 m0.insertNextCell(NORM_TRI3,[0,5,6])
5781 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5782 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5783 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5784 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5785 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5787 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5788 m1.insertNextCell(NORM_SEG2,[10,5])
5789 m1.insertNextCell(NORM_SEG2,[5,0])
5790 m1.insertNextCell(NORM_SEG2,[0,1])
5791 m1.insertNextCell(NORM_SEG2,[1,2])
5792 m1.insertNextCell(NORM_SEG2,[2,3])
5793 m1.insertNextCell(NORM_SEG2,[3,4])
5794 m1.insertNextCell(NORM_SEG2,[4,9])
5795 m1.insertNextCell(NORM_SEG2,[9,14])
5796 m1.insertNextCell(NORM_SEG2,[14,13])
5797 m1.insertNextCell(NORM_SEG2,[13,12])
5798 m1.insertNextCell(NORM_SEG2,[12,11])
5799 m1.insertNextCell(NORM_SEG2,[11,10])
5801 mm[0]=m0 ; mm[-1]=m1
5802 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5804 tab[0]=DataArrayInt([0,2,3,4,6,7])
5805 tab[-1]=DataArrayInt([2,3,4,5,9])
5807 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5811 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5814 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5815 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5816 f0.setMesh(m0) ; f0.setName(fname0)
5817 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5818 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5819 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]))
5820 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5821 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5822 fmts.pushBackTimeStep(f1ts)
5824 mmOut=mm.extractPart(tab)
5826 fsPart0=fs.extractPart(tab,mm)
5827 self.assertEqual(len(fsPart0),1)
5829 self.assertEqual(len(fmtsP),1)
5831 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5833 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5834 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5836 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5837 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5838 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5839 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5840 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5842 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5843 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5844 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5845 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5846 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5847 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5848 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5849 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5850 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5851 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5853 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5854 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5855 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5857 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5858 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5859 for i,tt in enumerate(tss):
5860 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5861 myarr=arr0_0+i*1000.
5863 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5864 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5866 fsPart1=fs.extractPart(tab,mm)
5867 self.assertEqual(len(fsPart1),1)
5869 self.assertEqual(len(fmtsP),len(tss))
5870 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5871 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5872 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5873 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5874 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5875 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5876 self.assertEqual(fPart.getTime(),list(tt))
5881 def testSymmetryPlusAggregationMFD1(self):
5882 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5883 fname1="Pyfile106_1.med"
5884 fname2="Pyfile106_2.med"
5885 fname3="Pyfile106_3.med"
5888 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5890 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5891 mm1_0.setCoords(da1)
5892 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5893 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5894 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5895 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5896 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5898 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5899 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5901 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5902 mm1_1.setCoords(da1)
5903 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5904 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5905 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5906 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5907 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5908 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5910 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5911 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5912 for i in range(1,10):
5913 mm1.setFamilyId("F%d"%i,i)
5914 mm1.setFamilyId("FAMILLE_ZERO",0)
5915 mm1.setFamilyId("H1",100)
5916 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5917 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5918 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5919 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5922 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]"])
5924 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5925 mm2_0.setCoords(da1)
5926 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5927 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5928 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5929 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5931 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5932 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5934 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5935 mm2_1.setCoords(da1)
5936 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5937 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5938 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5939 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5940 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5941 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5942 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5943 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5945 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5946 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5947 for i in range(1,12):
5948 mm2.setFamilyId("G%d"%i,i+30)
5949 mm2.setFamilyId("H1",100)
5950 mm2.setFamilyId("FAMILLE_ZERO",0)
5951 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5952 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5953 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5954 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5956 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5958 def CheckMesh(tester,mm):
5959 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]"])
5960 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5961 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])))
5962 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5963 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])))
5964 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5965 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5966 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5967 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5968 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5969 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)]
5970 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5971 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5972 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5973 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5980 infoc=["dd [W]","eee [kA]"]
5982 fmts1=MEDFileFieldMultiTS()
5983 f1ts1=MEDFileField1TS()
5984 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5985 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5986 arr1.setInfoOnComponents(infoc)
5987 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5988 f1_1.checkConsistencyLight()
5989 f1ts1.setFieldNoProfileSBT(f1_1)
5991 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5992 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5993 arr2.setInfoOnComponents(infoc)
5994 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5995 f1_2.checkConsistencyLight()
5996 f1ts1.setFieldNoProfileSBT(f1_2)
5997 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5998 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5999 arr3.setInfoOnComponents(infoc)
6000 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6001 f1_3.checkConsistencyLight()
6002 f1ts1.setFieldNoProfileSBT(f1_3)
6003 fmts1.pushBackTimeStep(f1ts1)
6005 f1ts2=f1ts1.deepCopy()
6006 f1ts2.setTime(t2[1],t2[2],t2[0])
6007 f1ts2.getUndergroundDataArray()[:]+=2000
6008 fmts1.pushBackTimeStep(f1ts2)
6010 fmts2=MEDFileFieldMultiTS()
6011 f1ts3=MEDFileField1TS()
6012 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6013 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6014 arr4.setInfoOnComponents(infoc)
6015 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6016 f2_1.checkConsistencyLight()
6017 f1ts3.setFieldNoProfileSBT(f2_1)
6018 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6019 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6020 arr5.setInfoOnComponents(infoc)
6021 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6022 f2_2.checkConsistencyLight()
6023 f1ts3.setFieldNoProfileSBT(f2_2)
6024 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6025 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6026 arr6.setInfoOnComponents(infoc)
6027 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6028 f2_3.checkConsistencyLight()
6029 f1ts3.setFieldNoProfileSBT(f2_3)
6030 fmts2.pushBackTimeStep(f1ts3)
6032 f1ts4=f1ts3.deepCopy()
6033 f1ts4.setTime(t2[1],t2[2],t2[0])
6034 f1ts4.getUndergroundDataArray()[:]+=2000
6035 fmts2.pushBackTimeStep(f1ts4)
6038 mfd1.setMeshes(MEDFileMeshes())
6039 mfd1.getMeshes().pushMesh(mm1)
6040 mfd1.setFields(MEDFileFields())
6041 mfd1.getFields().pushField(fmts1)
6044 mfd2.setMeshes(MEDFileMeshes())
6045 mfd2.getMeshes().pushMesh(mm2)
6046 mfd2.setFields(MEDFileFields())
6047 mfd2.getFields().pushField(fmts2)
6049 mfd=MEDFileData.Aggregate([mfd1,mfd2])
6050 def CheckMFD(tester,mfd):
6051 tester.assertEqual(len(mfd.getMeshes()),1)
6052 tester.assertEqual(len(mfd.getFields()),1)
6053 CheckMesh(self,mfd.getMeshes()[0])
6054 tester.assertEqual(len(mfd.getFields()[0]),2)
6055 zeF1=mfd.getFields()[0][0]
6056 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6057 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6058 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6059 ref.renumberCells(o2n)
6060 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6061 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6062 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6063 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6064 ref.renumberCells(o2n)
6065 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6066 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6067 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6068 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6069 ref.renumberCells(o2n)
6070 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6072 zeF2=mfd.getFields()[0][1]
6073 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6074 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6075 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6076 ref.renumberCells(o2n)
6077 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6078 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6079 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6080 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6081 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6082 ref.renumberCells(o2n)
6083 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6084 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6085 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6086 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6087 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6088 ref.renumberCells(o2n)
6089 ref.setTime(*t2) ; ref.getArray()[:]+=2000
6090 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6092 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6093 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6098 def testAggregateWithGroups(self):
6099 """ Testing MEDFileUMesh::Aggretate when groups are present. """
6100 def generate(grp_name, offset):
6101 coo = DataArrayDouble([0., 1., 2.])
6103 m = MEDCouplingCMesh("toto")
6104 m.setCoords(coo, coo)
6105 m = m.buildUnstructured()
6106 mu = MEDFileUMesh.New()
6107 mu.setMeshAtLevel(0, m)
6108 g = DataArrayInt([0])
6110 g2 = DataArrayInt([1])
6111 g2.setName("common") # make a common group for all meshes being merged
6112 mu.setGroupsAtLevel(0, [g, g2])
6115 m1 = generate("A", 0.)
6116 m2 = generate("B", 2.)
6117 mm = MEDFileUMesh.Aggregate([m1,m2])
6119 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6120 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6121 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6122 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6123 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6124 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6125 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6126 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6127 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6132 def testExtrudedMesh1(self):
6133 fname="Pyfile107.med"
6134 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6135 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6136 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6139 ex2=mm.convertToExtrudedMesh()
6140 mm2=MEDFileMesh.New(fname)
6141 ex3=mm2.convertToExtrudedMesh()
6142 self.assertTrue(ex.isEqual(ex2,1e-12))
6143 self.assertTrue(ex.isEqual(ex3,1e-12))
6146 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6148 def testWriteInto30(self):
6149 fname="Pyfile108.med"
6150 fname2="Pyfile109.med"
6151 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6152 mm=MEDFileUMesh() ; mm[0]=m
6153 mm.setFamilyId("FAMILLE_ZERO",0)
6156 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6157 mm2=MEDFileUMesh(fname)
6158 self.assertTrue(mm.isEqual(mm2,1e-12))
6161 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
6164 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6166 def testPickelizationOfMEDFileObjects1(self):
6167 fname="Pyfile110.med"
6168 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)
6169 m0=MEDCouplingUMesh("Mesh",2)
6171 m0.insertNextCell(NORM_TRI3,[1,4,2])
6172 m0.insertNextCell(NORM_TRI3,[4,5,2])
6173 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6174 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6175 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6176 m0.finishInsertingCells()
6178 m1=MEDCouplingUMesh(m0.getName(),1)
6180 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6182 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6184 m1.finishInsertingCells()
6188 m.setMeshAtLevel(0,m0)
6189 m.setMeshAtLevel(-1,m1)
6191 dt=3 ; it=2 ; tim=4.5
6192 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6193 fieldNode0.setName("fieldNode0")
6194 fieldNode0.setTime(tim,dt,it)
6195 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6196 arr=DataArrayDouble([10,11,12,13,14])
6197 fieldNode0.setArray(arr)
6198 f0=MEDFileField1TS()
6199 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6200 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6201 fieldNode1.setName("fieldNode1")
6202 fieldNode1.setTime(tim,dt,it)
6203 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6204 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6205 fieldNode1.setArray(arr1)
6206 f1=MEDFileField1TS()
6207 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6209 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6210 mfd.getMeshes().pushMesh(m)
6211 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6212 mfd.getFields().pushField(fmts)
6213 # first start gently
6216 self.assertEqual(len(mfd2.getMeshes()),1)
6217 self.assertEqual(len(mfd2.getFields()),1)
6218 self.assertEqual(len(mfd2.getFields()[0]),1)
6219 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6220 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6221 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6222 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6223 # OK now end of joke -> serialization of MEDFileData
6224 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6225 mfd3=pickle.loads(st)
6227 self.assertEqual(len(mfd3.getMeshes()),1)
6228 self.assertEqual(len(mfd3.getFields()),1)
6229 self.assertEqual(len(mfd3.getFields()[0]),1)
6230 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6231 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6232 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6233 # serialization of MEDFileFields
6234 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6235 fs4=pickle.loads(st)
6236 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6237 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6238 # serialization of MEDFileFieldMulitTS
6239 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6240 fmts5=pickle.loads(st)
6241 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6242 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6243 # serialization of MEDFileField1TS
6244 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6245 f1ts6=pickle.loads(st)
6246 ff6=f1ts6.field(mfd3.getMeshes()[0])
6247 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6248 # serialization of MEDFileMeshes
6249 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6250 ms7=pickle.loads(st)
6251 self.assertEqual(len(ms7),1)
6252 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6255 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6257 def testPickelizationOfMEDFileObjects2(self):
6259 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6260 mm=MEDFileMesh.New("MEDFileMesh5.med")
6261 self.assertTrue(isinstance(mm,MEDFileCMesh))
6262 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6263 mm2=pickle.loads(st)
6264 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6265 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6267 self.internalCurveLinearMesh1() # generates Pyfile55.med
6268 mm=MEDFileMesh.New("Pyfile55.med")
6269 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6270 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6271 mm3=pickle.loads(st)
6272 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6273 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6274 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6275 # MEDFileIntFieldMultiTS
6276 fs4=MEDFileFields("Pyfile63.med")
6277 ms4=MEDFileMeshes("Pyfile63.med")
6278 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6279 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6280 fmts5=pickle.loads(st)
6281 self.assertEqual(len(fs4[0]),len(fmts5))
6282 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6283 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6284 # MEDFileIntField1TS
6285 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6286 f1ts6=pickle.loads(st)
6287 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6288 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6290 self.internalParameters1()# generates Pyfile56.med
6291 params=MEDFileParameters("Pyfile56.med")
6292 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6293 params7=pickle.loads(st)
6294 self.assertEqual(len(params),len(params7))
6295 for i in range(len(params)):
6296 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6301 def testGlobalNumOnNodes1(self):
6302 """Test global number on nodes here. Used by partitionners."""
6303 fname="Pyfile112.med"
6304 arr=DataArrayDouble(5) ; arr.iota()
6305 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6309 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6310 d=DataArrayInt([7,8,9,2,0])
6312 mm.setGlobalNumFieldAtLevel(1,d)
6313 mm.checkConsistency()
6314 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6315 mm.checkConsistency()
6316 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6317 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6319 mm2=MEDFileMesh.New(fname)
6320 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6321 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6322 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6323 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6324 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6325 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6329 def testPartialReadOfEntities1(self):
6330 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6331 fname="Pyfile113.med"
6332 arr=DataArrayDouble(5) ; arr.iota()
6333 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6340 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6341 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6343 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6344 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6346 f1ts=MEDFileField1TS()
6347 f1ts.setFieldNoProfileSBT(f1)
6348 f1ts.setFieldNoProfileSBT(f2)
6349 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6350 f1ts_2=f1ts.deepCopy()
6351 f1ts_2.getUndergroundDataArray()[:]+=2
6352 f1ts_2.setTime(3,4,6.)
6353 fmts=MEDFileFieldMultiTS()
6354 fmts.pushBackTimeStep(f1ts)
6355 fmts.pushBackTimeStep(f1ts_2)
6360 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6361 mm=MEDFileMesh.New(fname)
6362 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)
6364 self.assertEqual(len(fs),1)
6366 self.assertEqual(len(fmts),2)
6367 ff0=fmts[0] ; ff1=fmts[1]
6368 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6369 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6370 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6371 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6375 def testFloat32InMEDFileFieldStar1(self):
6376 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6377 fname="Pyfile114.med"
6378 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6379 f1=f1.convertToFloatField()
6381 mm1=MEDFileUMesh.New()
6382 mm1.setCoords(m1.getCoords())
6383 mm1.setMeshAtLevel(0,m1)
6384 mm1.setName(m1.getName())
6386 ff1=MEDFileFloatField1TS()
6387 ff1.setFieldNoProfileSBT(f1)
6388 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6389 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6390 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6392 a,b=ff1.getUndergroundDataArrayExt()
6393 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6394 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6395 ff2=MEDFileAnyTypeField1TS.New(fname)
6396 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6397 self.assertEqual(ff2.getTime(),[0,1,2.0])
6398 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6399 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6400 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6401 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6403 c=ff2.getUndergroundDataArray() ; c*=2
6404 ff2.write(fname,0) # 2 time steps in
6405 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6406 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6407 self.assertEqual(len(ffs1),2)
6408 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6409 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6410 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6411 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6412 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6413 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6414 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6415 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6416 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6417 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6418 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6420 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6423 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6424 nf1=MEDCouplingFieldFloat(ON_NODES)
6425 nf1.setTime(9.,10,-1)
6426 nf1.setMesh(f1.getMesh())
6427 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6428 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6429 nff1=MEDFileFloatField1TS.New()
6430 nff1.setFieldNoProfileSBT(nf1)
6431 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6432 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6435 nf2=MEDCouplingFieldFloat(ON_NODES)
6436 nf2.setTime(19.,20,-11)
6437 nf2.setMesh(f1.getMesh())
6438 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6439 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6440 nff2=MEDFileFloatField1TS.New()
6441 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6442 nff2.setFieldProfile(nf2,mm1,0,npfl)
6443 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6444 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6445 self.assertTrue(b.isEqual(npfl))
6446 self.assertTrue(a.isEqual(narr2,1e-7))
6448 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6449 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6450 self.assertTrue(b.isEqual(npfl))
6451 self.assertTrue(a.isEqual(narr2,1e-7))
6453 nf3=MEDCouplingFieldDouble(ON_NODES)
6454 nf3.setName("VectorFieldOnNodesDouble")
6455 nf3.setTime(29.,30,-21)
6456 nf3.setMesh(f1.getMesh())
6457 nf3.setArray(f1.getMesh().getCoords())
6458 nff3=MEDFileField1TS.New()
6459 nff3.setFieldNoProfileSBT(nf3)
6461 fs=MEDFileFields(fname)
6462 self.assertEqual(len(fs),4)
6463 ffs=[it for it in fs]
6464 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6465 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6466 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6467 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6469 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6470 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6471 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6472 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6473 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6475 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6476 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6477 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6478 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6479 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6480 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6481 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6482 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6484 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6485 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6486 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6487 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6491 def testPenta18_1(self):
6492 """EDF8478 : Test of read/write of penta18"""
6493 fname="Pyfile115.med"
6494 arr=DataArrayDouble([
6495 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6496 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6497 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6498 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6499 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6500 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6501 m=MEDCouplingUMesh("mesh",3)
6504 m.insertNextCell(NORM_PENTA18,list(range(18)))
6505 m.checkConsistencyLight()
6507 f=MEDCouplingFieldDouble(ON_NODES)
6509 f.setName("FieldOnPenta18")
6510 f.setArray(DataArrayDouble(list(range(18))))
6511 f.checkConsistencyLight()
6513 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6515 f2=MEDCouplingFieldDouble(ON_NODES)
6517 f2.setName("FieldOnPenta18Sub")
6518 f2.setArray(DataArrayDouble(list(range(18))))
6519 f2.checkConsistencyLight()
6520 WriteField(fname,f2,True)
6522 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6523 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6524 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6528 def testFieldsLinearToQuadratic(self):
6529 fname="Pyfile117.med"
6530 arr=DataArrayDouble([0,1])
6531 m=MEDCouplingCMesh();
6532 m.setCoords(arr,arr,arr)
6533 m=m.buildUnstructured()
6535 m2.translate([2,0,0])
6536 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6540 mmq=mm.linearToQuadratic(0)
6541 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6542 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6544 f=MEDCouplingFieldDouble(ON_NODES)
6548 arr=DataArrayDouble(m3.getNumberOfNodes())
6551 f1ts=MEDFileField1TS()
6552 f1ts.setFieldNoProfileSBT(f)
6553 fmts=MEDFileFieldMultiTS()
6554 fmts.pushBackTimeStep(f1ts)
6555 f1ts_2=f1ts.deepCopy()
6556 f1ts_2.setTime(3,4,5.)
6557 f1ts_2.getUndergroundDataArray()[:]*=2.
6558 fmts.pushBackTimeStep(f1ts_2)
6561 fs2=fs.linearToQuadratic(mms,mmsq)
6562 self.myTester1(fs2,mmsq[0])
6563 # A small Write/Read and test again
6564 mms.write(fname,2) ; fs.write(fname,0)
6565 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6566 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6567 fs2=fs.linearToQuadratic(mms,mmqs)
6568 self.myTester1(fs2,mmqs[0])
6571 def myTester1(self,fs2,mmq):
6572 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)
6573 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])
6574 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])
6575 fToTest=fs2[0][0].field(mmq)
6576 self.assertEqual(fToTest.getTime(),[3.,1,2])
6577 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6578 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6579 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6580 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6581 # testing 2nd timestep
6582 fToTest=fs2[0][1].field(mmq)
6583 self.assertEqual(fToTest.getTime(),[5.,3,4])
6584 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6585 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6586 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6587 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6591 def testFieldsLinearToQuadratic2(self):
6592 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6593 GeneratePyfile18(self)
6594 fname="Pyfile118.med"
6595 arr=DataArrayDouble([0,1])
6596 m=MEDCouplingCMesh();
6597 m.setCoords(arr,arr,arr)
6598 m=m.buildUnstructured()
6600 m2.translate([2,0,0])
6601 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6603 # add a point for fun
6604 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6608 mmq=mm.linearToQuadratic(0)
6609 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6610 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6612 f=MEDCouplingFieldDouble(ON_NODES)
6616 arr=DataArrayDouble(8) ; arr.iota()
6619 f1ts=MEDFileField1TS()
6620 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6621 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6622 f1ts_2=f1ts.deepCopy()
6623 f1ts_2.setTime(3,4,5.)
6624 f1ts_2.getUndergroundDataArray()[:]*=4.
6625 fmts=MEDFileFieldMultiTS()
6626 fmts.pushBackTimeStep(f1ts)
6627 fmts.pushBackTimeStep(f1ts_2)
6630 fs2=fs.linearToQuadratic(mms,mmsq)
6631 mms.write(fname,2) ; fs.write(fname,0)
6633 self.myTester2(fs2,mmq)
6635 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6636 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6637 fs2=fs.linearToQuadratic(mms,mmqs)
6638 self.myTester2(fs2,mmq)
6639 ## More vicious add single node 16
6642 mmq=mm.linearToQuadratic(0)
6643 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6644 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6646 f=MEDCouplingFieldDouble(ON_NODES)
6650 arr=DataArrayDouble(9) ; arr.iota()
6653 f1ts=MEDFileField1TS()
6654 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6655 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6656 fmts=MEDFileFieldMultiTS()
6657 fmts.pushBackTimeStep(f1ts)
6660 fs2=fs.linearToQuadratic(mms,mmsq)
6662 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")
6663 f1tsToTest=fs2[0][0]
6664 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])
6665 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6666 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6667 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6670 def myTester2(self,fs2,mmq):
6671 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")
6672 f1tsToTest=fs2[0][0]
6673 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])
6674 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6675 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6676 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6677 fToTest=fs2[0][0].field(mmq)
6678 self.assertEqual(fToTest.getTime(),[3.,1,2])
6679 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6680 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])))
6681 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))
6682 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6684 f1tsToTest=fs2[0][1]
6685 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6686 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6687 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6688 fToTest=fs2[0][1].field(mmq)
6689 self.assertEqual(fToTest.getTime(),[5.,3,4])
6690 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6691 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])))
6692 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))
6693 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6698 def testSetFieldProfileFlatly1(self):
6699 """ 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
6701 arr=DataArrayDouble(10) ; arr.iota()
6702 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6703 m=m.buildUnstructured()
6706 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6710 f=MEDCouplingFieldDouble(ON_CELLS)
6712 arr=DataArrayDouble(m.getNumberOfCells())
6716 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6718 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6719 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6721 f1ts=MEDFileField1TS()
6722 f1ts.setFieldProfile(f,mm,0,pfl)
6723 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6724 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6725 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6727 f1ts=MEDFileField1TS()
6728 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6729 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6730 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6731 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6732 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6733 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6737 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6738 """ Here multi level groups are created"""
6739 arr=DataArrayDouble(11) ; arr.iota()
6740 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6741 m=m.buildUnstructured()
6743 m1=m.buildDescendingConnectivity()[0]
6748 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6749 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6750 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6751 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6752 ################ ajouter un groupe sur plusieurs niveau
6754 mm.addGroup(-1,grp2)
6755 mm.addGroup(0,grp0_0)
6756 mm.addGroup(-1,grp0_1)
6757 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6758 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6759 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6760 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6761 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6762 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6763 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6764 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6765 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6766 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6767 mm.removeGroupAtLevel(0,grpName)
6768 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6769 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6770 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6771 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6772 mm.removeGroupAtLevel(-1,grpName)
6773 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6774 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6775 mm.addGroup(-1,grp0_1)
6776 mm.addGroup(0,grp0_0)
6777 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6778 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6779 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6780 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6781 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6785 def testYutaka(self):
6786 """ 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...
6787 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6789 m=MEDCouplingCMesh()
6790 arr=DataArrayDouble(4) ; arr.iota()
6791 m.setCoords(arr,arr,arr)
6792 m=m.buildUnstructured()
6795 m=m.buildUnstructured()
6796 m1=m.buildDescendingConnectivity()[0]
6802 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6804 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6806 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6808 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6809 mm.addGroup(-1,grp3)
6810 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6811 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6812 mm.addNodeGroup(grp4)
6813 mm.rearrangeFamilies()
6814 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6815 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6816 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6817 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6818 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6820 for grp in [grp0,grp1,grp2,grp3,grp4]:
6821 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6826 def testContxtMger1TS(self):
6827 fname="Pyfile119.med"
6828 coo=DataArrayDouble(1000) ; coo.iota()
6829 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6831 WriteMesh(fname,m,True)
6832 f=MEDCouplingFieldDouble(ON_CELLS)
6835 arr=DataArrayDouble(m.getNumberOfCells())
6837 f.checkConsistencyLight()
6840 f.setTime(float(i),i,0)
6841 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6844 mm=MEDFileMesh.New(fname)
6845 fmts=MEDFileFieldMultiTS(fname,False)
6846 refSize=fmts.getHeapMemorySize()
6852 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6855 def testZipFamilies1(self):
6857 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6860 arr=DataArrayDouble(10) ; arr.iota()
6861 m=MEDCouplingCMesh()
6862 m.setCoords(arr,arr)
6863 m=m.buildUnstructured()
6868 for i in range(m.getNumberOfCells()):
6869 d = DataArrayInt([i])
6870 d.setName("grp%d"%i)
6874 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6875 grp_all.setName("grp_all")
6876 mm.addGroup(0,grp_all)
6877 for i in range(m.getNumberOfCells()):
6878 mm.removeGroup("grp{}".format(i))
6881 mm.zipFamilies() # the method to test
6883 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6884 self.assertEqual(len(mm.getFamiliesNames()),1)
6885 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6888 def testZipFamilies2(self):
6890 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6893 arr=DataArrayDouble(21) ; arr.iota()
6894 m=MEDCouplingCMesh()
6896 m=m.buildUnstructured()
6901 # 1 and 3 to be merged
6902 # 2 and 5 to be merged
6903 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6904 for i in range(1,9):
6905 mm.setFamilyId("Fam_{}".format(i),-i)
6906 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6907 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6908 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6910 grp0=DataArrayInt([0,1,3,8,10,19])
6911 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6912 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6913 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6914 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6915 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6916 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6918 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6919 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6920 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6921 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6922 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6925 def testMeshConvertFromMEDFileGeoType(self):
6926 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6929 def testFieldInt64_0(self):
6931 Small basic test with I/O of field in int64.
6933 fname="Pyfile120.med"
6934 arr = DataArrayDouble([0,1])
6935 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6936 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6937 v = 1234567890123456
6938 f.setArray(DataArrayInt64([v]))
6942 f1ts = MEDFileInt64Field1TS()
6943 f1ts.setFieldNoProfileSBT(f)
6944 fmts = MEDFileInt64FieldMultiTS()
6945 fmts.pushBackTimeStep(f1ts)
6946 fs = MEDFileFields()
6951 mm = MEDFileMesh.New(fname)
6952 fs = MEDFileFields(fname)
6953 f = fs[0][0].field(mm)
6954 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6955 self.assertEqual( f.getArray().getIJ(0,0) , v )
6958 def testNonRegUMeshSubParts(self):
6960 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6962 fname = "Pyfile121.med"
6963 m0 = MEDCouplingUMesh("mesh",1)
6964 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6965 m0.setCoords(coords)
6967 m0.insertNextCell(NORM_SEG2,[1,2])
6970 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6971 m1.setCoords(m0.getCoords())
6972 m1.setNodalConnectivity(DataArrayInt([1,2]))
6973 m1.setName(m0.getName())
6975 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6976 mm.zipCoords() # <- This call changes the coords and connectivity
6979 mm = MEDFileMesh.New(fname)
6980 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6981 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6986 if __name__ == "__main__":