1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2020 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author : Anthony Geay (EDF R&D)
22 from MEDLoader import *
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
31 if sys.version_info.major < 3:
32 import cPickle as pickle
36 class StdOutRedirect(object):
37 def __init__(self,fileName):
40 self.stdoutOld=os.dup(2)
41 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42 fd2=os.dup2(self.fdOfSinkFile,2)
43 self.origPyVal=sys.stderr
44 class FlushFile(object):
53 return self.f.isatty()
57 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
61 sys.stderr=self.origPyVal
63 os.dup2(self.stdoutOld,2)
64 os.close(self.stdoutOld)
66 class MEDLoaderTest3(unittest.TestCase):
68 def testMEDMesh1(self):
69 GeneratePyfile18(self)
70 fileName="Pyfile18.med"
71 mname="ExampleOfMultiDimW"
72 medmesh=MEDFileMesh.New(fileName,mname)
73 self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75 m1_0=medmesh.getLevel0Mesh(True)
76 m1_1=ReadUMeshFromFile(fileName,mname,0)
77 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78 m2_0=medmesh.getLevelM1Mesh(True)
79 m2_1=ReadUMeshFromFile(fileName,mname,-1)
80 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
84 def testMEDMesh2(self):
85 GeneratePyfile10(self)
86 fileName="Pyfile10.med"
88 outFileName="MEDFileMesh1.med"
89 medmesh=MEDFileUMesh.New(fileName,mname)
90 self.assertEqual((0,),medmesh.getNonEmptyLevels())
91 m1_0=medmesh.getLevel0Mesh(True)
92 m1_1=ReadUMeshFromFile(fileName,mname,0)
93 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94 g1_0=medmesh.getGroup(0,"mesh2",True)
95 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97 g1_0=medmesh.getGroup(0,"mesh3",True)
98 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102 g1_1.setName(g1_0.getName())
103 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104 g1_0=medmesh.getFamily(0,"Family_-3",True)
105 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107 g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109 g1_1.setName(g1_0.getName())
110 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112 medmesh.write(outFileName,2);
113 self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114 self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115 self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116 self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117 famn=medmesh.getFamilyNameGivenId(0)
118 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
120 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
127 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
129 def testMEDMesh3(self):
130 outFileName="MEDFileMesh3.med"
131 c=DataArrayDouble.New()
132 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134 c.setValues(coords,9,2)
135 m=MEDCouplingUMesh.New();
136 m.setMeshDimension(2);
138 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143 m.finishInsertingCells();
145 m.checkConsistencyLight()
146 m1=MEDCouplingUMesh.New();
147 m1.setMeshDimension(1);
149 m1.insertNextCell(NORM_SEG2,2,[1,4])
150 m1.insertNextCell(NORM_SEG2,2,[3,6])
151 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152 m1.finishInsertingCells();
154 m1.checkConsistencyLight()
155 m2=MEDCouplingUMesh.New();
156 m2.setMeshDimension(0);
158 m2.insertNextCell(NORM_POINT1,1,[1])
159 m2.insertNextCell(NORM_POINT1,1,[3])
160 m2.insertNextCell(NORM_POINT1,1,[2])
161 m2.insertNextCell(NORM_POINT1,1,[6])
162 m2.finishInsertingCells();
164 m2.checkConsistencyLight()
166 mm=MEDFileUMesh.New()
167 self.assertTrue(mm.getUnivNameWrStatus())
168 mm.setName("MyFirstMEDCouplingMEDmesh")
169 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
171 mm.setMeshAtLevel(-1,m1);
172 mm.setMeshAtLevel(0,m);
173 mm.setMeshAtLevel(-2,m2);
174 # playing with groups
175 g1_2=DataArrayInt.New()
176 g1_2.setValues([1,3],2,1)
178 g2_2=DataArrayInt.New()
179 g2_2.setValues([1,2,3],3,1)
181 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182 g1_1=DataArrayInt.New()
183 g1_1.setValues([0,1,2],3,1)
185 g2_1=DataArrayInt.New()
186 g2_1.setValues([0,2],2,1)
188 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189 g1_N=DataArrayInt.New()
190 g1_N.setValues(list(range(8)),8,1)
192 g2_N=DataArrayInt.New()
193 g2_N.setValues(list(range(9)),9,1)
195 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196 mm.createGroupOnAll(0,"GrpOnAllCell")
197 # check content of mm
198 t=mm.getGroupArr(0,"G1",False)
199 self.assertTrue(g1_2.isEqual(t));
200 t=mm.getGroupArr(0,"G2",False)
201 self.assertTrue(g2_2.isEqual(t));
202 t=mm.getGroupArr(-1,"G1",False)
203 self.assertTrue(g1_1.isEqual(t));
204 t=mm.getGroupArr(-1,"G2",False)
205 self.assertTrue(g2_1.isEqual(t));
206 t=mm.getGroupArr(1,"G1",False)
207 self.assertTrue(g1_N.isEqual(t));
208 t=mm.getGroupArr(1,"G2",False)
209 self.assertTrue(g2_N.isEqual(t));
210 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211 t=mm.getGroupArr(0,"GrpOnAllCell")
212 self.assertTrue(t.getValues()==list(range(5)))
215 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216 mmCpy.write(outFileName,2);
218 mm=MEDFileMesh.New(outFileName)
220 self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221 self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222 self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223 mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224 self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225 self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226 self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227 lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228 self.assertEqual(3,len(lmm))
229 self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230 self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231 self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
233 self.assertTrue(mm.getUnivNameWrStatus())
234 self.assertTrue(isinstance(mm.getUnivName(),str))
235 self.assertTrue(len(mm.getUnivName())!=0)
236 mbis=mm.getMeshAtLevel(0)
237 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238 self.assertTrue(m.isEqual(mbis,1e-12));
240 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
243 # this test is the testMEDMesh3 except that permutation is dealed here
245 def testMEDMesh4(self):
246 outFileName="MEDFileMesh4.med"
247 c=DataArrayDouble.New()
248 coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250 c.setValues(coords,9,2)
251 c.setInfoOnComponent(0,"abcdef [km]")
252 c.setInfoOnComponent(1,"ghij [MW]")
253 m=MEDCouplingUMesh.New();
254 m.setMeshDimension(2);
256 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261 m.finishInsertingCells();
263 m.checkConsistencyLight()
264 m1=MEDCouplingUMesh.New();
265 m1.setMeshDimension(1);
267 m1.insertNextCell(NORM_SEG2,2,[1,4])
268 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269 m1.insertNextCell(NORM_SEG2,2,[3,6])
270 m1.finishInsertingCells();
272 m1.checkConsistencyLight()
273 m2=MEDCouplingUMesh.New();
274 m2.setMeshDimension(0);
276 m2.insertNextCell(NORM_POINT1,1,[1])
277 m2.insertNextCell(NORM_POINT1,1,[3])
278 m2.insertNextCell(NORM_POINT1,1,[2])
279 m2.insertNextCell(NORM_POINT1,1,[6])
280 m2.finishInsertingCells();
282 m2.checkConsistencyLight()
284 mm=MEDFileUMesh.New()
285 mm.setName("My2ndMEDCouplingMEDmesh")
286 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
288 renumNode=DataArrayInt.New()
289 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290 mm.setRenumFieldArr(1,renumNode)
292 mm.setMeshAtLevel(-1,m1,True);
293 mm.setMeshAtLevel(0,m,True);
294 mm.setMeshAtLevel(-2,m2,True);
295 mm.removeMeshAtLevel(-2)
296 mm.setMeshAtLevel(-2,m2,True);
297 # playing with groups
298 g1_2=DataArrayInt.New()
299 g1_2.setValues([2,3],2,1)
301 g2_2=DataArrayInt.New()
302 g2_2.setValues([2,0,3],3,1)
304 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305 g1_1=DataArrayInt.New()
306 g1_1.setValues([0,2,1],3,1)
308 g2_1=DataArrayInt.New()
309 g2_1.setValues([0,2],2,1)
311 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312 g1_N=DataArrayInt.New()
313 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
315 g2_N=DataArrayInt.New()
316 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
318 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319 # check content of mm
320 t=mm.getGroupArr(0,"G1",True)
321 self.assertTrue(g1_2.isEqual(t));
322 t=mm.getGroupArr(0,"G2",True)
323 self.assertTrue(g2_2.isEqual(t));
324 t=mm.getGroupArr(-1,"G1",True)
325 self.assertTrue(g1_1.isEqual(t));
326 t=mm.getGroupArr(-1,"G2",True)
327 self.assertTrue(g2_1.isEqual(t));
328 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
330 mm.write(outFileName,2);
331 mm2=MEDFileMesh.New(outFileName)
332 res=mm.isEqual(mm2,1e-12)
333 self.assertTrue(res[0])
334 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336 mm2.keepFamIdsOnlyOnLevs([3],[-1])
337 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
340 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
343 self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345 self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346 self.assertTrue(not mm2.existsFamily("Family_-8"))
347 mm2.createGroupOnAll(-1,"GrpOnAllFace")
348 self.assertTrue(mm2.existsFamily("Family_-8"))
349 self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
352 #testing persistence of retrieved arrays
354 def testMEDMesh5(self):
355 GeneratePyfile18(self)
356 fileName="Pyfile18.med"
357 mname="ExampleOfMultiDimW"
358 medmesh=MEDFileUMesh.New(fileName,mname)
359 m1_0=medmesh.getLevel0Mesh(True)
360 da1=medmesh.getFamilyFieldAtLevel(0)
362 self.assertEqual(20,m1_0.getNumberOfCells())
363 self.assertEqual(20,da1.getNumberOfTuples())
366 def internalMEDMesh6(self):
367 outFileName="MEDFileMesh5.med"
370 m1=MEDCouplingCMesh.New();
371 da=DataArrayDouble.New()
372 da.setValues([0.,1.,2.],3,1)
373 da.setInfoOnComponent(0,"XX [mm]")
375 da=DataArrayDouble.New()
376 da.setValues([0.,1.2],2,1)
377 da.setInfoOnComponent(0,"YY [km]")
379 da=DataArrayDouble.New()
380 da.setValues([0.,1.3],2,1)
381 da.setInfoOnComponent(0,"ZZ [um]")
384 self.assertTrue(m[0].isEqual(m1,1e-12))
385 self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386 m.setName("myFirstCartMesh")
387 m.setDescription("mmmmpppppppp")
390 da=DataArrayInt.New()
391 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392 m.setFamilyFieldArr(1,da)
393 m.setFamilyId("family1",1)
394 da=m.getFamilyArr(1,"family1")
396 self.assertEqual(expected1,da.getValues())
397 self.assertTrue(m.getUnivNameWrStatus())
398 m.write(outFileName,2);
399 mm=MEDFileMesh.New(outFileName)
400 self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401 self.assertTrue(isinstance(mm,MEDFileCMesh))
402 self.assertTrue(isinstance(mm.getUnivName(),str))
403 self.assertTrue(len(mm.getUnivName())!=0)
404 self.assertTrue(m.isEqual(mm,1e-12)[0])
405 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
408 m1.setTime(tt[2],tt[0],tt[1])
409 m1.setName(m.getName())
410 m1.setTimeUnit(m.getTimeUnit())
411 m1.setDescription(m.getDescription())
412 self.assertTrue(m2.isEqual(m1,1e-12));
415 def testMEDMesh6(self):
416 self.internalMEDMesh6()
420 def testMEDMesh7(self):
421 fileName="Pyfile24.med"
422 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
424 m.setCoords(m2.getCoords())
425 m.setMeshAtLevel(0,m2)
426 m.setMeshAtLevel(-1,m1)
427 m.setMeshAtLevel(-2,m0)
428 m.setFamilyFieldArr(0,f2)
429 m.setFamilyFieldArr(-1,f1)
430 m.setFamilyFieldArr(-2,f0)
431 m.setFamilyFieldArr(1,p)
432 m.setRenumFieldArr(0,n2)
433 m.setRenumFieldArr(-1,n1)
434 m.setRenumFieldArr(-2,n0)
436 for i in range(nbOfFams):
437 m.addFamily(fns[i],fids[i])
440 for i in range(nbOfGrps):
441 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
443 m.setName(m2.getName())
444 m.setDescription(m2.getDescription())
446 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
457 self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
460 def funcToTestDelItem(self,ff):
464 #emulation of pointe.med file.
466 def testMEDField1(self):
467 TestMultiFieldShuffleRW1(self)
468 mm=MEDFileMesh.New("Pyfile17.med")
469 mm.write("Pyfile17_bis.med",2)
470 ff=MEDFileFieldMultiTS("Pyfile17.med")
471 tsExpected=[[1,2],[3,4],[5,6]]
472 self.assertEqual(3,len(ff))
473 for pos,f1ts in enumerate(ff):
474 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475 self.assertEqual(type(f1ts),MEDFileField1TS)
477 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478 self.assertEqual([3,4],ff[1].getTime()[:-1])
479 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481 ff.write("Pyfile17_bis.med",0)
483 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484 self.assertEqual([(1,2),(3,4),(5,6)],ts)
485 self.funcToTestDelItem(ff)
486 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487 self.assertEqual([(1,2)],ts)
492 def testMEDField2(self):
493 GeneratePyfile19(self)
494 mm=MEDFileMesh.New("Pyfile19.med")
495 mm.write("Pyfile19_bis.med",2)
496 ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497 ff.write("Pyfile19_bis.med",0)
498 self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
503 def testMEDField3(self):
504 GeneratePyfile13(self)
505 mm=MEDFileMesh.New("Pyfile13.med")
506 mm.write("Pyfile13_bis.med",2)
507 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508 ff.write("Pyfile13_bis.med",0)
509 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511 f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513 ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514 f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516 ff4=MEDFileField1TS.New("Pyfile13.med")
517 f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518 self.assertTrue(f.isEqual(f4,1e-12,1e-12))
523 def testMEDField4(self):
524 GeneratePyfile14(self)
525 mm=MEDFileMesh.New("Pyfile14.med")
526 mm.write("Pyfile14_bis.med",2)
527 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528 ff.write("Pyfile14_bis.med",0)
529 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531 f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
535 # MEDField get/set on pointe.med
537 def testMEDField5(self):
538 TestMultiFieldShuffleRW1(self)
539 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540 f=ff.getFieldAtLevel(ON_CELLS,0)
541 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546 # no with renumbering
547 f=ff.getFieldAtLevel(ON_CELLS,0,1)
548 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550 f=ff.getFieldAtLevel(ON_CELLS,0,3)
551 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552 f=ff.getFieldAtLevel(ON_CELLS,0,2)
553 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
558 # MEDField get/set on profiles nodes
560 def testMEDField6(self):
561 GeneratePyfile7(self)
562 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563 its=ff.getIterations()
564 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566 f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568 GeneratePyfile19(self)
569 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570 its=ff.getIterations()
571 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572 f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
578 # MEDField get/set on profiles cells
580 def testMEDField7(self):
581 GeneratePyfile12(self)
582 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583 its=ff.getIterations()
584 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585 f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
589 #first test of assignation. No profile and types sorted by type.
591 def testMEDField8(self):
593 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
595 mm1=MEDFileUMesh.New()
596 mm1.setCoords(m1.getCoords())
597 mm1.setMeshAtLevel(0,m1)
598 mm1.setName(m1.getName())
600 ff1=MEDFileField1TS.New()
601 ff1.setFieldNoProfileSBT(f1)
603 f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604 itt,orr,ti=ff1.getTime()
605 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
608 itt,orr,ti=ff1.getTime()
609 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
611 ff1.copyTimeInfoFrom(f1)
612 itt,orr,ti=ff1.getTime()
613 self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614 da,infos=ff1.getUndergroundDataArrayExt()
615 f2.getArray().setName(da.getName())#da has the same name than f2
616 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
620 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
622 mm1=MEDFileUMesh.New()
623 mm1.setCoords(m1.getCoords())
624 mm1.setMeshAtLevel(0,m1)
625 mm1.setName(m1.getName())
627 ff1=MEDFileField1TS.New()
628 ff1.setFieldNoProfileSBT(f1)
630 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
632 f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634 f1.getArray().setIJ(0,0,nv)
635 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
638 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
640 mm1=MEDFileUMesh.New()
641 mm1.setCoords(m1.getCoords())
642 mm1.setMeshAtLevel(0,m1)
643 mm1.setName(m1.getName())
645 ff1=MEDFileField1TS.New()
646 ff1.setFieldNoProfileSBT(f1)
648 f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650 da,infos=ff1.getUndergroundDataArrayExt()
651 f2.getArray().setName(da.getName())#da has the same name than f2
652 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
656 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657 f1InvalidCpy=f1.deepCopy()
658 f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659 f1InvalidCpy2=f1.deepCopy()
660 f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
662 mm1=MEDFileUMesh.New()
663 mm1.setCoords(m1.getCoords())
664 mm1.setMeshAtLevel(0,m1)
665 mm1.setName(m1.getName())
667 ff1=MEDFileField1TS.New()
668 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669 f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671 ff1.setFieldNoProfileSBT(f1)
673 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676 sbt=ff2.getFieldSplitedByType2()
677 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680 self.assertEqual(6,loc1.getNumberOfPointsInCells())
681 self.assertEqual(3,loc1.getNumberOfGaussPoints())
682 self.assertEqual(2,loc1.getDimension())
683 da,infos=ff2.getUndergroundDataArrayExt()
684 f2.getArray().setName(da.getName())#da has the same name than f2
685 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686 self.assertEqual(53,da.getNumberOfTuples())
687 self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
692 def testMEDFileData1(self):
696 m1=MEDLoaderDataForTest.build1DMesh_1()
697 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698 mmm1=MEDFileMeshMultiTS.New() ;
699 mmm1.setOneTimeStep(mm1)
700 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
705 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706 self.assertEqual(name,mmm.getName())
707 self.assertEqual(type(mmm),MEDFileUMesh)
709 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
711 ff1=MEDFileFieldMultiTS.New()
712 ff21=MEDFileFieldMultiTS.New()
713 ff22=MEDFileFieldMultiTS.New()
714 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715 f1.getArray().setInfoOnComponent(0,"power [kW]")
716 ff1.appendFieldNoProfileSBT(f1)
717 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719 ff21.appendFieldNoProfileSBT(f21)
720 f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723 ff22.appendFieldNoProfileSBT(f22)
724 fs=MEDFileFields.New()
725 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726 for name,fmts in zip(["f1","f21","f22"],fs):
727 self.assertEqual(name,fmts.getName())
731 fname2="Pyfile29_2.med"
734 d2=MEDFileData.New(fname2)
735 self.assertEqual(2,d2.getNumberOfMeshes())
736 self.assertEqual(3,d2.getNumberOfFields())
737 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741 self.assertTrue(m1.isEqual(m1bis,1e-12))
742 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
750 def testMEDField9(self):
751 # first test field profile WR. Full type but with some type missing
753 m1=MEDLoaderDataForTest.build2DMesh_3()
754 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
756 ff1=MEDFileField1TS.New()
757 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
762 ff1.setFieldProfile(f1,mm1,0,da)
763 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
767 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769 self.assertTrue(vals.isEqual(d,1e-14))
771 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773 ff2.deepCpyGlobs(ff3)
774 sbt=ff2.getFieldSplitedByType2()
775 self.assertEqual(3,sbt[0][0])#TRI3
776 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779 self.assertEqual(4,sbt[1][0])#QUAD4
780 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786 self.assertTrue(vals.isEqual(d,1e-14))
790 def testMEDField10(self):
792 m1=MEDLoaderDataForTest.build2DMesh_1()
793 m1.renumberCells([0,1,4,2,3,5],False)
794 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
796 ff1=MEDFileFieldMultiTS.New()
797 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
802 ff1.appendFieldProfile(f1,mm1,0,da)
803 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804 ff1.appendFieldProfile(f1,mm1,0,da)
808 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810 self.assertTrue(vals.isEqual(e,1e-14))
811 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813 self.assertTrue(vals.isEqual(d,1e-14))
815 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819 self.assertTrue(vals.isEqual(e,1e-14))
820 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822 self.assertTrue(vals.isEqual(d,1e-14))
825 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
827 def testMEDField11(self):
829 m1=MEDLoaderDataForTest.build2DMesh_1()
830 m1.renumberCells([0,1,4,2,3,5],False)
831 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
833 ff1=MEDFileField1TS.New()
834 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
839 ff1.setFieldProfile(f1,mm1,0,da)
840 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
843 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845 self.assertTrue(vals.isEqual(d,1e-14))
847 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850 self.assertTrue(vals.isEqual(d,1e-14))
854 def testMEDField12(self):
856 m1=MEDLoaderDataForTest.build2DMesh_1()
857 m1.renumberCells([0,1,4,2,3,5],False)
858 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
860 ff1=MEDFileFieldMultiTS.New()
861 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
866 ff1.appendFieldProfile(f1,mm1,0,da)
867 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868 ff1.appendFieldProfile(f1,mm1,0,da)
871 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873 self.assertTrue(vals.isEqual(e,1e-14))
874 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876 self.assertTrue(vals.isEqual(d,1e-14))
878 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881 self.assertTrue(vals.isEqual(e,1e-14))
882 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884 self.assertTrue(vals.isEqual(d,1e-14))
888 def testMEDField13(self):
890 m1=MEDLoaderDataForTest.build2DMesh_1()
891 m1.renumberCells([0,1,4,2,3,5],False)
893 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
896 ff1=MEDFileField1TS.New()
897 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
902 ff1.setFieldProfile(f1,mm1,0,da)
905 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907 self.assertTrue(vals.isEqual(d,1e-14))
909 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912 self.assertTrue(vals.isEqual(d,1e-14))
916 def testMEDField14(self):
918 m1=MEDLoaderDataForTest.build2DMesh_1()
919 m1.renumberCells([0,1,4,2,3,5],False)
921 m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
924 ff1=MEDFileFieldMultiTS.New()
925 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
930 ff1.appendFieldProfile(f1,mm1,0,da)
931 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932 ff1.appendFieldProfile(f1,mm1,0,da)
935 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937 self.assertTrue(vals.isEqual(d,1e-14))
938 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940 self.assertTrue(vals.isEqual(e,1e-14))
941 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
943 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946 self.assertTrue(vals.isEqual(d,1e-14))
947 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949 self.assertTrue(vals.isEqual(e,1e-14))
951 # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952 # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953 # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
955 def testMEDField15(self):
957 m0=MEDLoaderDataForTest.build2DMesh_1()
958 m0.renumberCells([0,1,4,2,3,5],False)
960 m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962 ff1=MEDFileField1TS.New()
963 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
968 ff1.setFieldProfile(f1,mm1,0,da)
969 m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
972 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974 self.assertTrue(p1.isIota(5))
975 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
977 # Test for getFieldAtTopLevel method
979 def testMEDField16(self):
981 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
983 mm1=MEDFileUMesh.New()
984 mm1.setCoords(m1.getCoords())
985 mm1.setMeshAtLevel(0,m1)
986 mm1.setName(m1.getName())
987 ff1=MEDFileField1TS.New()
988 ff1.setFieldNoProfileSBT(f1)
989 m2=m1.buildDescendingConnectivity()[0]
990 m2.sortCellsInMEDFileFrmt()
991 m2.setName(m1.getName())
992 mm1.setMeshAtLevel(-1,m2)
994 f2=m2.getMeasureField(True)
995 dd=DataArrayDouble.New()
996 dd.alloc(f2.getArray().getNumberOfTuples(),3)
997 dd[:,0]=f2.getArray()
998 dd[:,1]=2*f2.getArray()
999 dd[:,2]=3*f2.getArray()
1000 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1002 f2.copyTinyStringsFrom(f1)
1003 f2.copyTinyAttrFrom(f1)
1004 ff1.setFieldNoProfileSBT(f2)
1006 # Reading Pyfile37.med
1007 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1015 fname="Pyfile38.med"
1017 ff1=MEDFileField1TS.New()
1018 ff1.setFieldNoProfileSBT(f2)
1020 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1025 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1027 def testMEDField17(self):
1028 fname="Pyfile39.med"
1029 m1=MEDLoaderDataForTest.build2DMesh_1()
1030 m1.renumberCells([0,1,4,2,3,5],False)
1031 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1033 ffs=MEDFileFields.New()
1034 ff1=MEDFileFieldMultiTS.New()
1035 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1040 ff1.appendFieldProfile(f1,mm1,0,da)
1041 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042 ff1.appendFieldProfile(f1,mm1,0,da)
1044 ffs.setFieldAtPos(0,ff1)
1048 ffsr=MEDFileFields.New(fname)
1049 ff3=ffsr.getFieldAtPos(0)
1050 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1054 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1056 def testMEDField18(self):
1057 fname="Pyfile40.med"
1058 m1=MEDLoaderDataForTest.build2DMesh_1()
1059 m1.renumberCells([0,1,4,2,3,5],False)
1060 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1062 ffs=MEDFileFields.New()
1063 ff1=MEDFileFieldMultiTS.New()
1064 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1069 ff1.appendFieldProfile(f1,mm1,0,da)
1070 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071 ff1.appendFieldProfile(f1,mm1,0,da)
1075 ffsr=MEDFileFields.New(fname)
1076 ff3=ffsr.getFieldAtPos(0)
1077 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1082 def testMEDFieldBug1(self):
1083 GeneratePyfile13(self)
1084 fname="Pyfile13.med"
1085 d=MEDFileData.New(fname)
1086 self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1090 def testMEDMesh8(self):
1091 m=MEDLoaderDataForTest.build1DMesh_1()
1092 m.convertQuadraticCellsToLinear()
1093 mm=MEDFileUMesh.New()
1094 mm.setMeshAtLevel(0,m)
1095 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098 mm.setGroupsAtLevel(0,[g1,g2],False)
1099 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100 self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101 self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102 self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103 mm.assignFamilyNameWithGroupName()
1104 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1109 mm=MEDFileUMesh.New()
1110 mm.setMeshAtLevel(0,m)
1111 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123 mm.changeFamilyId(5,6)
1124 g=mm.getGroupArr(0,"g3")
1125 self.assertTrue(g.isEqual(g3));
1126 g=mm.getGroupArr(0,"g2")
1127 self.assertTrue(g.isEqual(g2));
1128 g=mm.getGroupArr(0,"g1")
1129 self.assertTrue(g.isEqual(g1));
1132 # bug detected by gauthier
1134 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135 fname="Pyfile41.med"
1136 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1138 mm1=MEDFileUMesh.New()
1139 mm1.setCoords(m1.getCoords())
1140 mm1.setMeshAtLevel(0,m1)
1142 ff1=MEDFileField1TS.New()
1143 ff1.setFieldNoProfileSBT(f1)
1145 # writing mesh1 and field1, now creation of mesh2 and field2
1148 m2.translate([0.5,0.6,0.7])
1149 m2.setName("3DSurfMesh_2")
1150 f2.getArray()[:]*=2.
1151 f2.setName("VectorFieldOnCells2")
1152 mm2=MEDFileUMesh.New()
1153 mm2.setCoords(m2.getCoords())
1154 mm2.setMeshAtLevel(0,m2)
1156 ff2=MEDFileField1TS.New()
1157 ff2.setFieldNoProfileSBT(f2)
1160 f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162 f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1167 def testMEDLoaderMultiLevelCellField1(self):
1168 fname="Pyfile42.med"
1169 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170 m=MEDFileUMesh.New()
1171 m.setCoords(m2.getCoords())
1172 m.setMeshAtLevel(0,m2)
1173 m.setMeshAtLevel(-1,m1)
1174 m.setMeshAtLevel(-2,m0)
1178 compNames1=["comp1","comp2","comp3"]
1179 ff1=MEDFileField1TS.New()
1180 da2=DataArrayDouble.New()
1181 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1183 da2.rearrange(len(compNames1))
1184 da2.setInfoOnComponents(compNames1)
1185 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186 ff1.setFieldNoProfileSBT(f2)
1187 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188 da0=DataArrayDouble.New()
1189 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1191 da0.rearrange(len(compNames1))
1192 da0.setInfoOnComponents(compNames1)
1193 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194 ff1.setFieldNoProfileSBT(f0)
1195 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196 da1=DataArrayDouble.New()
1197 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1199 da1.rearrange(len(compNames1))
1200 da1.setInfoOnComponents(compNames1)
1201 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202 ff1.setFieldNoProfileSBT(f1)
1203 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1208 compNames2=["comp11","comp22"]
1209 ff2=MEDFileField1TS.New()
1210 da0=DataArrayDouble.New()
1211 da0.alloc(m0.getNumberOfCells()*2,1)
1214 da0.setInfoOnComponents(compNames2)
1215 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216 ff2.setFieldNoProfileSBT(f0)
1217 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218 da1=DataArrayDouble.New()
1219 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1221 da1.rearrange(len(compNames2))
1222 da1.setInfoOnComponents(compNames2)
1223 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224 ff2.setFieldNoProfileSBT(f1)
1225 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1229 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1238 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239 fname="Pyfile43.med"
1240 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241 m=MEDFileUMesh.New()
1242 m.setMeshAtLevel(0,m2)
1243 m.setMeshAtLevel(-1,m1)
1244 m.setMeshAtLevel(-2,m0)
1245 f=MEDFileField1TS.New()
1246 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247 ff.setName("NodeFieldPfl")
1248 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1250 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251 f.setFieldProfile(ff,m,-2,pfl)
1252 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261 expected1=[1.,10.,100.,2.,20.,200.]
1262 nodeCoordsWithValue1=[10.,2.5,0.]
1263 nodeCoordsWithValue2=[10.,3.75,0.]
1265 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1269 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1273 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1283 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1288 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289 f=MEDFileField1TS.New()
1290 f.setFieldProfile(ff,m,-2,pfl)
1291 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300 expected2=[2.,20.,200.,1.,10.,100.]
1302 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1306 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1309 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1319 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1324 def testBuildInnerBoundaryAlongM1Group1(self):
1325 fname="Pyfile44.med"
1326 m=MEDCouplingCMesh.New()
1327 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332 m2.setName(m.getName())
1333 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335 mm=MEDFileUMesh.New()
1336 mm.setMeshAtLevel(0,m)
1337 mm.setMeshAtLevel(-1,m2)
1338 mm.setGroupsAtLevel(-1,[grp,grp2])
1339 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340 mm.setGroupsAtLevel(1,[grpNode])
1341 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1345 self.assertEqual(30,mm.getNumberOfNodes())
1346 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1349 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350 self.assertEqual([15,16,17],nodes.getValues());
1351 self.assertEqual([7,8,9],cells.getValues());
1352 self.assertEqual([12,13,14],cells2.getValues());
1353 self.assertEqual(33,mm.getNumberOfNodes())
1354 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1366 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1375 def testBuildInnerBoundaryAlongM1Group2(self):
1376 fname="Pyfile45.med"
1377 m=MEDCouplingCMesh.New()
1378 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383 m2.setName(m.getName())
1384 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386 mm=MEDFileUMesh.New()
1387 mm.setMeshAtLevel(0,m)
1388 mm.setMeshAtLevel(-1,m2)
1389 mm.setGroupsAtLevel(-1,[grp,grp2])
1390 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391 mm.setGroupsAtLevel(1,[grpNode])
1392 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393 ref1=[4,9,8,14,15,4,10,9,15,16]
1394 ref2=[4,9,8,14,30,4,10,9,30,16]
1396 self.assertEqual(30,mm.getNumberOfNodes())
1397 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1400 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401 self.assertEqual([15],nodes.getValues());
1402 self.assertEqual([7,8],cells.getValues());
1403 self.assertEqual([12,13],cells2.getValues());
1404 self.assertEqual(31,mm.getNumberOfNodes())
1405 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413 refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1417 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1426 def testBuildInnerBoundaryAlongM1Group3(self):
1427 """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428 fname = "Pyfile73.med"
1429 m = MEDCouplingCMesh.New()
1430 m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431 m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432 m = m.buildUnstructured(); m.setName("simple")
1433 m2 = m.buildDescendingConnectivity()[0]
1434 m2.setName(m.getName())
1436 # A crack in two non connected parts of the mesh:
1437 grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1439 mm = MEDFileUMesh.New()
1440 mm.setMeshAtLevel(0,m)
1441 mm.setMeshAtLevel(-1,m2)
1442 mm.setGroupsAtLevel(-1,[grpSeg])
1443 nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444 self.assertEqual([1,13],nodes.getValues());
1445 self.assertEqual([0,6],cellsMod.getValues());
1446 self.assertEqual([1,7],cellsNotMod.getValues());
1447 self.assertEqual(17,mm.getNumberOfNodes())
1448 self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449 self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450 ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451 ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1457 refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459 self.assertTrue(delta.getMaxValue()[0]<1e-10)
1461 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463 refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1465 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1469 def testBuildInnerBoundaryAlongM1Group4(self):
1470 """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1472 coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473 0.,1., 1.,1., 2.,1., 3.,1.,
1474 0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475 conn = [3,0,4,1, 3,1,4,5,
1482 connI = DataArrayInt()
1483 connI.alloc(13, 1); connI.iota(); connI *= 4
1484 m2 = MEDCouplingUMesh("2D", 2)
1486 m2.setConnectivity(DataArrayInt(conn), connI)
1487 m2.checkConsistency()
1488 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489 grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490 grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491 mfu = MEDFileUMesh()
1492 mfu.setMeshAtLevel(0, m2)
1493 mfu.setMeshAtLevel(-1, m1)
1494 mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495 nNod = m2.getNumberOfNodes()
1496 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497 m2_bis = mfu.getMeshAtLevel(0)
1498 m2_bis.checkConsistency()
1499 m1_bis = mfu.getMeshAtLevel(-1)
1500 m1_bis.checkConsistency()
1501 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504 self.assertEqual([6,7], nodesDup.getValues())
1505 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506 self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507 self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508 self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509 self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510 self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511 # mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1512 ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1513 ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1514 self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1515 self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1516 self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1517 mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1518 m_bis0 = mfu.getMeshAtLevel(-1)
1519 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1520 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1523 def testBuildInnerBoundary5(self):
1524 """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1525 of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1526 coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1527 200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1528 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1529 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1530 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1531 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1532 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1533 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1534 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1535 97.16750463405486, 97.18018457127863], 46, 3)
1536 c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1537 39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1538 21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1539 14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1540 17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1541 24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1542 44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1543 44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1544 29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1545 21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1547 cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1548 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1549 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1550 m3 = MEDCouplingUMesh("3D", 3)
1552 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1553 m3.checkConsistency()
1554 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1555 grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1556 mfu = MEDFileUMesh()
1557 mfu.setMeshAtLevel(0, m3)
1558 mfu.setMeshAtLevel(-1, m2)
1559 grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1560 mfu.setGroupsAtLevel(0, [grpIds3D]) # just to check preservation of 3D group
1561 mfu.setGroupsAtLevel(-1, [grpIds])
1562 nNod = m3.getNumberOfNodes()
1563 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1564 m3_bis = mfu.getMeshAtLevel(0)
1565 m3_bis.checkConsistency()
1566 m2_bis = mfu.getMeshAtLevel(-1)
1567 m2_bis.checkConsistency()
1568 self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1569 self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1570 self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1571 self.assertEqual([3], nodesDup.getValues())
1572 self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1573 self.assertEqual(set([22]), set(cells1.getValues()))
1574 self.assertEqual(set([77]), set(cells2.getValues()))
1575 self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1576 self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1577 self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1578 m_bis0 = mfu.getMeshAtLevel(-1)
1579 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1580 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1584 def testBuildInnerBoundary6(self):
1585 """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1586 The singular point was wrongly duplicated.
1588 coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1589 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1590 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1591 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1592 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1593 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1594 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1595 c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1596 18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1597 28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1598 cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1599 m3 = MEDCouplingUMesh("3D", 3)
1601 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1602 m3.checkConsistency()
1603 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1604 grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1605 mfu = MEDFileUMesh()
1606 mfu.setMeshAtLevel(0, m3)
1607 mfu.setMeshAtLevel(-1, m2)
1608 mfu.setGroupsAtLevel(-1, [grpIds])
1609 nNod = m3.getNumberOfNodes()
1610 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1611 m3_bis = mfu.getMeshAtLevel(0)
1612 m3_bis.checkConsistency()
1613 m2_bis = mfu.getMeshAtLevel(-1)
1614 m2_bis.checkConsistency()
1615 self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1616 self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1617 self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1618 self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1619 self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1620 self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1621 self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1622 self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1623 self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1624 m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1625 m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1629 def testBasicConstructors(self):
1630 GeneratePyfile18(self)
1631 fname="Pyfile18.med"
1632 TestWriteUMeshesRW1(self)
1633 m=MEDFileMesh.New(fname)
1634 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1635 m=MEDFileMesh.New(fname)
1636 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1637 m=MEDFileUMesh(fname)
1639 self.internalMEDMesh6()
1640 m=MEDFileCMesh("MEDFileMesh5.med")
1641 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1643 m=MEDFileMeshMultiTS()
1644 m=MEDFileMeshMultiTS(fname)
1645 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1647 m=MEDFileMeshes(fname)
1649 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1650 m=MEDFileFieldMultiTS()
1651 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1653 m=MEDFileFields(fname)
1655 m=MEDFileData(fname)
1657 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1658 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1659 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1660 m=MEDCouplingCMesh()
1661 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1662 m=MEDCouplingFieldTemplate(ON_NODES)
1663 m=MEDCouplingMultiFields([])
1664 m=MEDCouplingFieldOverTime([])
1667 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1669 def testBugSemiPartialField(self):
1670 fname="Pyfile46.med"
1671 m=MEDLoaderDataForTest.build2DMesh_3()
1672 m=m[:10] ; m.setName("mesh")
1673 f=m.getMeasureField(False)
1674 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1676 f.setName("SemiPartialField")
1678 f1=f[:6] ; f1.getMesh().setName(m.getName())
1679 f2=f[6:] ; f2.getMesh().setName(m.getName())
1681 mm=MEDFileUMesh.New()
1682 mm.setMeshAtLevel(0,m)
1683 ff=MEDFileField1TS.New()
1684 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1688 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1689 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1690 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1692 fread.checkConsistencyLight()
1693 fread2.checkConsistencyLight()
1694 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1695 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1699 def testUnPolyze1(self):
1700 fname="Pyfile47.med"
1701 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1702 ref=[13,14,14,12,12,12,12,12,12,12,12,13,12,14,14,13,15,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
1703 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1704 self.assertEqual(mm.unPolyze()[:3],(True,[[3,2,0],[4,3,2],[5,4,5],[14,2,9],[16,3,11],[31,2,14]],[[3,3,0],[4,3,3],[5,3,6],[14,3,9],[16,3,12],[18,1,15]]))
1706 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1707 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1708 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1709 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1710 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1711 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1712 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1713 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1715 mm.setRenumFieldArr(0,None)
1716 mm.setFamilyFieldArr(-1,None)
1720 def testUnPolyze2(self):
1721 fname="Pyfile48.med"
1722 mfd=MEDFileData.New()
1723 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1724 meshes=MEDFileMeshes.New()
1726 mfd.setMeshes(meshes)
1727 fields=MEDFileFields.New()
1728 mfd.setFields(fields)
1729 ff=MEDFileFieldMultiTS.New()
1730 fields.pushField(ff)
1732 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1733 f0_0.setTime(9.5,3,4)
1734 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1736 f0_0.setMesh(mm.getMeshAtLevel(0))
1737 ff.appendFieldNoProfileSBT(f0_0)
1738 ff0=ff.getTimeStepAtPos(0)
1739 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1740 f0_1.setTime(9.5,3,4)
1741 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1742 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1743 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1745 ff0.setFieldProfile(f0_1,mm,0,pfl)
1746 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1747 f0_2.setTime(9.5,3,4)
1748 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1749 da=DataArrayDouble.New([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.],8,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])#provoquer error
1750 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1752 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1753 mfd.getFields().shallowCpyGlobs(ff0)
1755 mfd.unPolyzeMeshes()
1757 fmts=mfd.getFields()[0]
1758 self.assertEqual(fmts.getNumberOfTS(),1)
1759 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1760 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1761 self.assertEqual(entry,[((3,0),(38,40)),((4,0),(40,43)),((5,0),(43,46)),((14,0),(46,48)),((16,0),(48,49)),((18,0),(49,50)),((40,0),(0,38))])
1762 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1763 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1764 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1765 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1766 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1767 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1768 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1769 self.assertEqual([(3,[(0,(38,40),'NewPfl_0','')]),(4,[(0,(40,43),'','')]),(5,[(0,(43,46),'','')]),(14,[(0,(46,48),'NewPfl_1','')]),(16,[(0,(48,49),'NewPfl_2','')]),(18,[(0,(49,50),'','')]),(40,[(1,(0,38),'','')])],fmts.getFieldSplitedByType(3,4))
1770 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1771 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1772 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1773 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1774 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1775 self.assertEqual(ftest0.getMesh().getNodalConnectivity().getValues(),[14,4,5,6,7,14,26,27,28,29,16,20,21,22,23,24,25,18,30,31,32,33,34,35,36,37])
1776 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1777 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1778 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1779 self.assertEqual(ftest1.getMesh().getNodalConnectivity().getValues(),[3,0,1,2,3,3,4,5,4,6,7,8,9,4,10,11,12,13,4,14,15,16,17,5,18,19,20,21,22,5,23,24,25,26,27,5,31,32,33,34,35,36,37])
1780 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1786 def testGaussWriteOnPfl1(self):
1787 fname="Pyfile49.med"
1788 fname2="Pyfile50.med"
1789 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1790 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1791 mQ8.allocateCells(1)
1792 mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1793 mQ8.finishInsertingCells()
1794 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1795 mQ4.allocateCells(1)
1796 mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1797 mQ4.finishInsertingCells()
1798 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1799 mT3.allocateCells(1)
1800 mT3.insertNextCell(NORM_TRI3,list(range(3)))
1801 mT3.finishInsertingCells()
1803 tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]]
1804 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1805 ms[:]=(elt.deepCopy() for elt in ms)
1806 for m,t in zip(ms,tr):
1807 d=m.getCoords() ; d+= t
1809 m=MEDCouplingUMesh.MergeUMeshes(ms)
1811 m2=m[:13] ; m2.setName(m.getName())
1812 ### Use case 1 : Pfl on all tri3 and on all quad4. If we were on CELLS or GAUSS_NE no pfl were needed. But here 2 discs in tri3.
1813 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1814 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1817 da=DataArrayDouble(34) ; da.iota(3.)
1819 f.setName("fieldCellOnPflWithoutPfl")
1820 fInvalid=f.deepCopy()
1821 f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1822 f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1823 f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1824 f.checkConsistencyLight()
1825 fInvalid2=fInvalid.deepCopy()
1826 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1829 mm.setMeshAtLevel(0,m)
1832 f1ts=MEDFileField1TS.New()
1833 pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1834 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1835 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1836 f1ts.setFieldProfile(f,mm,0,pfl)
1839 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1840 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1841 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1842 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1843 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1844 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1845 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1846 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1848 dataRead=MEDFileData.New(fname)
1849 mRead=dataRead.getMeshes()[0]
1850 f1tsRead=dataRead.getFields()[0][0]
1851 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1852 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1853 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1854 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1855 f2_bis.checkConsistencyLight()
1856 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1858 WriteField(fname2,f,True)
1859 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1860 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1861 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1862 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1863 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1864 m2=m[pfl] ; m2.setName(m.getName())
1867 da=DataArrayDouble(35) ; da.iota(3.)
1869 f.setName("fieldCellOnPflWithoutPfl2")
1870 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1871 f.setGaussLocalizationOnCells([2,4,5],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1872 f.setGaussLocalizationOnCells([6,7,8,9],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1873 f.checkConsistencyLight()
1876 mm.setMeshAtLevel(0,m)
1878 f1ts=MEDFileField1TS.New()
1879 f1ts.setFieldProfile(f,mm,0,pfl)
1880 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1881 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1882 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1883 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1885 dataRead=MEDFileData.New(fname)
1886 mRead=dataRead.getMeshes()[0]
1887 f1tsRead=dataRead.getFields()[0][0]
1888 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1889 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1890 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1891 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1892 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1893 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1894 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1896 WriteField(fname2,f,True)
1897 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1898 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1899 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1900 ## Use case 3 : no pfl but creation of pfls due to gauss pts
1901 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1904 da=DataArrayDouble(60) ; da.iota(3.)
1906 f.setName("fieldCellWithoutPfl")
1907 f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1908 f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1909 f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1910 f.setGaussLocalizationOnCells([13,14,15,17,18],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8],[0.8,0.1,0.03,0.07])
1911 f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1])
1912 f.checkConsistencyLight()
1914 mm.setMeshAtLevel(0,m)
1915 f1ts=MEDFileField1TS.New()
1916 f1ts.setFieldNoProfileSBT(f)
1917 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1918 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1919 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1920 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1921 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1925 dataRead=MEDFileData.New(fname)
1926 mRead=dataRead.getMeshes()[0]
1927 f1tsRead=dataRead.getFields()[0][0]
1928 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1929 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1930 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1931 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1932 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1933 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1935 WriteField(fname2,f,True)
1936 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1937 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1938 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1941 # Testing profile on nodes when the profile is identity but not on all nodes.
1943 def testMEDFieldPflOnNode1(self):
1944 fname="Pyfile51.med"
1945 coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
1946 m0=MEDCouplingUMesh("Mesh",2)
1948 m0.insertNextCell(NORM_TRI3,[1,4,2])
1949 m0.insertNextCell(NORM_TRI3,[4,5,2])
1950 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1951 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1952 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1953 m0.finishInsertingCells()
1955 m1=MEDCouplingUMesh(m0.getName(),1)
1957 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1959 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1961 m1.finishInsertingCells()
1965 m.setMeshAtLevel(0,m0)
1966 m.setMeshAtLevel(-1,m1)
1968 dt=3 ; it=2 ; tim=4.5
1969 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1970 fieldNode0.setName("fieldNode0")
1971 fieldNode0.setTime(tim,dt,it)
1972 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1973 arr=DataArrayDouble([10,11,12,13,14])
1974 fieldNode0.setArray(arr)
1975 f0=MEDFileField1TS()
1976 f0.setFieldProfile(fieldNode0,m,0,pfl0)
1977 m.write(fname,2) ; f0.write(fname,0)
1978 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1979 fieldNode1.setName("fieldNode1")
1980 fieldNode1.setTime(tim,dt,it)
1981 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1982 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1983 fieldNode1.setArray(arr1)
1984 f1=MEDFileField1TS()
1985 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1988 ## Reading from file
1989 m=MEDFileMesh.New(fname)
1990 m0=m.getMeshAtLevel(0)
1991 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1992 fieldNode0.setMesh(m00)
1993 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1994 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1995 ff0_1.checkConsistencyLight()
1996 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1997 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1998 ff0_2.checkConsistencyLight()
1999 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2000 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2001 ff0_3.checkConsistencyLight()
2002 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2003 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2004 ff0_4.checkConsistencyLight()
2005 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2006 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2007 m1=m.getMeshAtLevel(-1)
2008 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2009 fieldNode1.setMesh(m10)
2010 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2011 ff1_1.checkConsistencyLight()
2012 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2013 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2014 ff1_2.checkConsistencyLight()
2015 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2016 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2017 ff1_3.checkConsistencyLight()
2018 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2019 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2020 ff1_4.checkConsistencyLight()
2021 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2022 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,m0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2023 self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_NODES,0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2024 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,0,m) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2025 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2026 arr_r.setName(fieldNode1.getArray().getName())
2027 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2028 pfl1_r.setName(pfl1.getName())
2029 self.assertTrue(pfl1_r.isEqual(pfl1))
2032 # Testing profile on nodes when the profile is identity but not on all nodes.
2034 def testMEDFieldPflOnCell1(self):
2035 fname="Pyfile52.med"
2036 coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
2037 m0=MEDCouplingUMesh("Mesh",2)
2039 m0.insertNextCell(NORM_TRI3,[1,4,2])
2040 m0.insertNextCell(NORM_TRI3,[4,5,2])
2041 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2042 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2043 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2044 m0.finishInsertingCells()
2046 m1=MEDCouplingUMesh(m0.getName(),1)
2048 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2050 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2052 m1.finishInsertingCells()
2056 m.setMeshAtLevel(0,m0)
2057 m.setMeshAtLevel(-1,m1)
2059 dt=3 ; it=2 ; tim=4.5
2060 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2061 fieldCell0.setName("fieldCell0")
2062 fieldCell0.setTime(tim,dt,it)
2063 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2064 arr=DataArrayDouble([10,11,12])
2065 fieldCell0.setArray(arr)
2066 f0=MEDFileField1TS()
2067 f0.setFieldProfile(fieldCell0,m,0,pfl0)
2068 m.write(fname,2) ; f0.write(fname,0)
2069 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2070 fieldCell1.setName("fieldCell1")
2071 fieldCell1.setTime(tim,dt,it)
2072 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2073 arr1=DataArrayDouble([20,21,22,23,24,25,26])
2074 fieldCell1.setArray(arr1)
2075 f1=MEDFileField1TS()
2076 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2079 ## Reading from file
2080 m=MEDFileMesh.New(fname)
2081 m0=m.getMeshAtLevel(0)
2082 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2083 fieldCell0.setMesh(m00)
2084 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2085 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2086 ff0_1.checkConsistencyLight()
2087 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2088 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2089 ff0_2.checkConsistencyLight()
2090 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2091 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2092 ff0_3.checkConsistencyLight()
2093 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2094 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2095 ff0_4.checkConsistencyLight()
2096 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2097 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2098 m1=m.getMeshAtLevel(-1)
2099 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2100 fieldCell1.setMesh(m10)
2101 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2102 ff1_1.checkConsistencyLight()
2103 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2104 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2105 ff1_2.checkConsistencyLight()
2106 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2107 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2108 ff1_3.checkConsistencyLight()
2109 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2110 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2111 ff1_4.checkConsistencyLight()
2112 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2113 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,m0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2114 self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_CELLS,0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2115 self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,0,m) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2116 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2117 arr_r.setName(fieldCell1.getArray().getName())
2118 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2119 pfl1_r.setName(pfl1.getName())
2120 self.assertTrue(pfl1_r.isEqual(pfl1))
2124 def testMEDFileUMeshZipCoords1(self):
2126 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2127 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2128 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2129 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2130 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2131 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2132 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2133 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2134 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2135 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2136 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2137 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2139 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2140 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2141 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2142 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2143 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2144 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2145 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2146 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2147 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2151 def testMEDUMeshAddNodeGroup1(self):
2152 fname="Pyfile53.med"
2154 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2155 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2156 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2157 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2158 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2159 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2160 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2163 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2164 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2165 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2166 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2167 mm.setFamilyId("MyFam",2)
2168 mm.setFamilyId("MyOtherFam",3)
2169 mm.setFamilyId("MyOther-1",-1)
2170 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2171 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2173 self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2175 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2176 mm.addNodeGroup(daTest)
2177 self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2178 self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2180 expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2181 self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2183 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2184 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2185 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2186 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2188 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2189 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2190 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2191 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2192 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2193 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2195 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2196 da=DataArrayInt([3,12]) ; da.setName("grp0")
2197 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2199 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2201 mm=MEDFileMesh.New(fname)
2202 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2203 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2204 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2205 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2207 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2208 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2209 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2210 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2211 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2212 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2214 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2215 da=DataArrayInt([3,12]) ; da.setName("grp0")
2216 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2218 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2222 def testMEDUMeshAddGroup1(self):
2223 fname="Pyfile54.med"
2225 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2226 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2228 m0.insertNextCell(NORM_TRI3,[1,2,1])
2231 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2234 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2236 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2237 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2238 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2239 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2240 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2243 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2244 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2245 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2246 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2247 mm.setFamilyId("MyFam",2)
2248 mm.setFamilyId("MyOtherFam",3)
2249 mm.setFamilyId("MyOther-1",-1)
2250 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2251 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2253 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2254 mm.addGroup(0,daTest)
2255 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2256 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2257 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2258 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2260 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2261 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2262 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2263 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2264 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2265 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2267 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2268 da=DataArrayInt([3,12]) ; da.setName("grp0")
2269 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2271 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2273 mm=MEDFileMesh.New(fname)
2274 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2275 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2276 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2277 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2279 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2280 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2281 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2282 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2283 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2284 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2286 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2287 da=DataArrayInt([3,12]) ; da.setName("grp0")
2288 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2290 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2294 def testHeapMem1(self):
2295 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2297 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2299 m=MEDCouplingCMesh()
2300 arr=DataArrayDouble(10,1) ; arr.iota(0)
2301 m.setCoords(arr,arr)
2302 m=m.buildUnstructured()
2304 f=m.getMeasureField(False)
2305 cooMem = 100 * 2 * 8
2306 nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2307 indexMem = 82 * MEDCouplingSizeOfIDs()//8
2308 meshMem = cooMem + nodalMem + indexMem
2309 self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2310 delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2311 self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2314 mm.setMeshAtLevel(0,m)
2315 self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2316 ff=MEDFileField1TS()
2317 ff.setFieldNoProfileSBT(f)
2318 self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2320 fff=MEDFileFieldMultiTS()
2321 fff.appendFieldNoProfileSBT(f)
2322 self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2324 fff.appendFieldNoProfileSBT(f)
2325 self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2326 self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2329 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2330 fff.appendFieldProfile(f2,mm,0,pfl)
2331 self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2332 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2333 self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac))
2336 def internalCurveLinearMesh1(self):
2337 fname="Pyfile55.med"
2338 mesh=MEDCouplingCurveLinearMesh();
2339 mesh.setTime(2.3,4,5);
2340 mesh.setTimeUnit("us");
2341 mesh.setName("Example of Cuve linear mesh");
2342 mesh.setDescription("buildCLMesh");
2343 a1=DataArrayDouble(3*20,1);
2344 a1.iota(7.) ; a1.rearrange(3);
2346 mesh.setNodeGridStructure([4,5]);
2347 mesh.checkConsistencyLight();
2349 m=MEDFileCurveLinearMesh()
2351 d=DataArrayInt(20) ; d.iota(4)
2352 m.setFamilyFieldArr(1,d)
2353 d3=DataArrayInt(20) ; d3.iota(400)
2354 m.setRenumFieldArr(1,d3)
2355 d2=DataArrayInt(12) ; d2.iota(40)
2356 m.setFamilyFieldArr(0,d2)
2357 d4=DataArrayInt(21) ; d4.iota(4000)
2358 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2360 m.setRenumFieldArr(1,d4)
2363 m1=MEDFileCurveLinearMesh(fname)
2365 self.assertTrue(mm.isEqual(mesh,1e-12))
2366 self.assertEqual(mm.getSpaceDimension(),3)
2367 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2369 m1=MEDFileMesh.New(fname)
2370 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2371 self.assertTrue(isinstance(m1.getUnivName(),str))
2372 self.assertTrue(len(m1.getUnivName())!=0)
2373 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2377 def testCurveLinearMesh1(self):
2378 self.internalCurveLinearMesh1()
2381 def testParameters1(self):
2382 self.internalParameters1()
2384 def internalParameters1(self):
2385 fname="Pyfile56.med"
2386 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2387 mm=MEDFileCMesh() ; mm.setMesh(m)
2388 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2390 p=MEDFileParameters()
2391 data.setParams(p) ; data.setMeshes(ms)
2392 pts=MEDFileParameterMultiTS()
2393 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2394 pts.appendValue(1,2,3.4,567.89)
2395 pts.appendValue(2,3,5.6,999.123)
2396 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2397 p.pushParam(pts) ; p.pushParam(pts2)
2399 p2=MEDFileParameters(fname)
2400 self.assertTrue(p.isEqual(p2,1e-14)[0])
2401 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2403 pts4=pts2.deepCopy()
2404 pts3=pts2.deepCopy()
2405 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2406 pts2.eraseTimeStepIds([0])
2407 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2409 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2410 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2411 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2412 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2413 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2415 self.assertTrue(p.isEqual(p2,1e-14)[0])
2416 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2417 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2418 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2419 self.assertEqual(p.getParamsNames(),('A','B'))
2420 ptsr=MEDFileParameterMultiTS(fname,"B")
2421 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2422 ptsr=MEDFileParameterMultiTS(fname)
2423 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2424 p1tsr=MEDFileParameterDouble1TS(fname)
2425 self.assertEqual(p1tsr.getName(),"A")
2426 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2427 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2428 self.assertEqual(p1tsr.getName(),"B")
2429 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2430 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2431 self.assertEqual(p1tsr.getName(),"B")
2432 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2433 data2=MEDFileData(fname)
2434 self.assertEqual(2,data2.getNumberOfParams())
2435 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2439 def testNamesOnCellAndNodesInMeshes1(self):
2440 fname="Pyfile58.med"
2441 fname2="Pyfile59.med"
2442 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2443 m1=m.buildDescendingConnectivity()[0]
2444 m1.sortCellsInMEDFileFrmt()
2447 mm.setMeshAtLevel(0,m)
2448 mm.setMeshAtLevel(-1,m1)
2449 namesCellL0=DataArrayAsciiChar(6,16)
2450 namesCellL0[:] = ["CellL0#%.3d " % (i) for i in range(6)]
2451 mm.setNameFieldAtLevel(0,namesCellL0)
2452 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2453 namesCellL1[:] = ["CellLM1#%.3d " % (i) for i in range(16)]
2454 mm.setNameFieldAtLevel(-1,namesCellL1)
2455 namesNodes=namesCellL1.subArray(4,16)
2456 namesNodes[:] = ["Node#%.3d " % (i) for i in range(12)]
2457 mm.setNameFieldAtLevel(1,namesNodes)
2460 mmr=MEDFileMesh.New(fname)
2461 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2462 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d " % (i) for i in range(16)])))
2463 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(12)])))
2464 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2465 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2466 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2467 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2468 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2470 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2471 # remove names on nodes
2472 mmCpy.setNameFieldAtLevel(1,None)
2473 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2474 mm.setNameFieldAtLevel(1,None)
2475 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2476 mm.setNameFieldAtLevel(-1,None)
2478 mmr=MEDFileMesh.New(fname)
2479 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2480 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d " % (i) for i in range(6)])))
2481 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2483 c=MEDCouplingCMesh()
2484 arr=DataArrayDouble([0.,1.1,2.3])
2485 c.setCoords(arr,arr)
2489 cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)]))
2490 cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)]))
2492 ccr=MEDFileMesh.New(fname2)
2493 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d " % (i) for i in range(4)])))
2494 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d " % (i) for i in range(9)])))
2495 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2496 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2497 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2498 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2499 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2501 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2505 def testToExportInExamples1(self):
2506 m=MEDCouplingCMesh()
2507 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2508 m.setCoords(arr,arr)
2509 m=m.buildUnstructured() ; m.setName("mesh")
2510 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2511 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2514 mm.setMeshAtLevel(0,m)
2515 mm.setMeshAtLevel(-1,m2)
2516 mm.setGroupsAtLevel(0,[grp1,grp2])
2517 mm.write("example.med",2)
2519 m0=mm.getMeshAtLevel(0)
2520 m1=mm.getMeshAtLevel(-1)
2521 grp1=mm.getGroupArr(0,"grp1")
2522 grp2=mm.getGroupArr(0,"grp2")
2524 whichGrp=DataArrayInt(m0.getNumberOfCells())
2525 whichGrp.fillWithValue(-1)
2526 for grpId,grp in enumerate(grps):
2529 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2530 e,f=a.areCellsIncludedIn(m1,2)
2532 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2533 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2534 c2.transformWithIndArr(whichGrp)
2535 splitOfM1=len(grps)*[None]
2536 for grpId,grp in enumerate(grps):
2537 tmp=c2.findIdsEqual(grpId)
2538 splitOfM1[grpId]=tmp
2540 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2541 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2545 def testBugCorrection1(self):
2548 self.assertEqual(fs[0],None)
2549 self.assertEqual(3,len(fs))
2553 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2554 f1Name="Pyfile60.med"
2555 f2Name="Pyfile61.med"
2556 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2558 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2560 # reading and compare
2561 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2562 for mn in d1.getMeshes().getMeshesNames():
2563 m1=d1.getMeshes()[mn]
2564 m2=d2.getMeshes()[mn]
2565 for lev in m1.getNonEmptyLevels():
2566 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2567 for grpName in grpsNames:
2568 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2572 for fieldn in d1.getFields().getFieldsNames():
2573 f1=d1.getFields()[fieldn]
2574 f2=d2.getFields()[fieldn]
2575 for it,order,tim in f1.getTimeSteps():
2578 if len(f1t.getPflsReallyUsed())!=0:
2580 for lev in f1t.getNonEmptyLevels()[1]:
2581 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2582 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2583 self.assertTrue(pfl1.isEqual(pfl2))
2584 self.assertTrue(arr1.isEqual(arr2,1e-10))
2589 for lev in f1t.getNonEmptyLevels()[1]:
2590 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2591 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2592 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2600 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2601 m=MEDCouplingCMesh()
2602 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2603 m.setCoords(arr,arr,arr)
2604 m=m.buildUnstructured()
2605 m2=m.buildDescendingConnectivity()[0]
2607 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2608 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2609 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2610 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2611 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2612 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2614 mm.setMeshAtLevel(0,m)
2615 mm.setGroupsAtLevel(0,[g1,g2])
2616 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2617 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2618 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2619 mm.normalizeFamIdsMEDFile()
2620 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2621 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2622 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2623 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2624 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2625 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2626 for g in mm.getGroupsOnSpecifiedLev(0):
2627 for f in mm.getFamiliesIdsOnGroup(g):
2628 self.assertTrue(f<0)
2633 mm.setMeshAtLevel(0,m)
2634 mm.setMeshAtLevel(-1,m2)
2635 mm.setGroupsAtLevel(0,[g1,g2])
2636 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2637 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2638 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2639 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2640 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2641 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2642 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2643 mm.normalizeFamIdsMEDFile()
2644 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2645 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2646 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2647 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2648 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2649 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2650 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2651 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2652 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2653 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2654 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2655 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2657 for g in mm.getGroupsOnSpecifiedLev(lev):
2658 for f in mm.getFamiliesIdsOnGroup(g):
2659 self.assertTrue(f<0)
2665 mm.setMeshAtLevel(0,m)
2666 mm.setMeshAtLevel(-1,m2)
2667 mm.setGroupsAtLevel(0,[g1,g2])
2668 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2669 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2670 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2671 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2672 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2673 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2674 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2675 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2676 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2677 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2678 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2679 mm.normalizeFamIdsMEDFile()
2680 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2681 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2682 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2683 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2684 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2685 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2686 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2687 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2688 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2689 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2690 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2691 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2692 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2693 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2694 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2695 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2696 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2697 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2699 for g in mm.getGroupsOnSpecifiedLev(lev):
2700 for f in mm.getFamiliesIdsOnGroup(g):
2701 self.assertTrue(f<0)
2705 for g in mm.getGroupsOnSpecifiedLev(1):
2706 for f in mm.getFamiliesIdsOnGroup(g):
2707 self.assertTrue(f>0)
2713 def testNonRegressionMantis22212ChangeGrpName(self):
2714 fileName="Pyfile62.med"
2715 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2716 m=MEDFileUMesh.New()
2717 m.setCoords(m2.getCoords())
2718 m.setMeshAtLevel(0,m2)
2719 m.setMeshAtLevel(-1,m1)
2720 m.setMeshAtLevel(-2,m0)
2721 m.setFamilyFieldArr(0,f2)
2722 m.setFamilyFieldArr(-1,f1)
2723 m.setFamilyFieldArr(-2,f0)
2724 m.setFamilyFieldArr(1,p)
2726 for i in range(nbOfFams):
2727 m.addFamily(fns[i],fids[i])
2730 for i in range(nbOfGrps):
2731 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2733 m.setName(m2.getName())
2734 m.setDescription(m2.getDescription())
2737 mm0=MEDFileMesh.New(fileName)
2738 mm1=MEDFileMesh.New(fileName)
2739 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2740 for name in groupNamesIni:
2741 mm1.changeGroupName(name,name+'N')
2743 mm1.write(fileName,2)
2746 mm2=MEDFileMesh.New(fileName)
2747 for name in groupNamesIni:
2748 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2749 arr0=mm0.getGroupArr(lev,name)
2750 arr2=mm2.getGroupArr(lev,name+'N')
2751 arr0.setName(name+'N')
2752 self.assertTrue(arr0.isEqual(arr2))
2758 def testInt32InMEDFileFieldStar1(self):
2759 self.internalInt32InMEDFileFieldStar1()
2761 def internalInt32InMEDFileFieldStar1(self):
2762 fname="Pyfile63.med"
2763 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2764 f1=f1.convertToIntField()
2766 mm1=MEDFileUMesh.New()
2767 mm1.setCoords(m1.getCoords())
2768 mm1.setMeshAtLevel(0,m1)
2769 mm1.setName(m1.getName())
2771 ff1=MEDFileIntField1TS()
2772 ff1.setFieldNoProfileSBT(f1)
2773 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2774 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2775 self.assertTrue(a.isEqual(f1,1e-12,0))
2777 a,b=ff1.getUndergroundDataArrayExt()
2778 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2779 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2780 ff2=MEDFileAnyTypeField1TS.New(fname)
2781 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2782 self.assertEqual(ff2.getTime(),[0,1,2.0])
2783 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2784 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2785 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2786 self.assertTrue(a.isEqual(f1,1e-12,0))
2788 c=ff2.getUndergroundDataArray() ; c*=2
2789 ff2.write(fname,0) # 2 time steps in
2790 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2791 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2792 self.assertEqual(len(ffs1),2)
2793 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2794 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2795 self.assertTrue(a.isEqual(f1,1e-12,0))
2796 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2797 self.assertTrue(a.isEqual(f1,1e-12,0))
2798 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2799 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2800 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2801 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2802 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2803 bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2805 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2808 self.assertTrue(bc.isEqual(3*f1.getArray()))
2809 nf1=MEDCouplingFieldInt(ON_NODES)
2810 nf1.setTime(9.,10,-1)
2811 nf1.setMesh(f1.getMesh())
2812 narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2813 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2814 nff1=MEDFileIntField1TS.New()
2815 nff1.setFieldNoProfileSBT(nf1)
2816 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2817 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2820 nf2=MEDCouplingFieldInt(ON_NODES)
2821 nf2.setTime(19.,20,-11)
2822 nf2.setMesh(f1.getMesh())
2823 narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2824 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2825 nff2=MEDFileIntField1TS.New()
2826 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2827 nff2.setFieldProfile(nf2,mm1,0,npfl)
2828 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2829 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2830 self.assertTrue(b.isEqual(npfl))
2831 self.assertTrue(a.isEqual(narr2))
2833 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2834 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2835 self.assertTrue(b.isEqual(npfl))
2836 self.assertTrue(a.isEqual(narr2))
2838 nf3=MEDCouplingFieldDouble(ON_NODES)
2839 nf3.setName("VectorFieldOnNodesDouble")
2840 nf3.setTime(29.,30,-21)
2841 nf3.setMesh(f1.getMesh())
2842 nf3.setArray(f1.getMesh().getCoords())
2843 nff3=MEDFileField1TS.New()
2844 nff3.setFieldNoProfileSBT(nf3)
2846 fs=MEDFileFields(fname)
2847 self.assertEqual(len(fs),4)
2848 ffs=[it for it in fs]
2849 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2850 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2851 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2852 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2854 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2855 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2856 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2857 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2858 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2860 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2861 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2862 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2863 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2864 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2865 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2866 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2867 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2869 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2870 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2871 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2872 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2876 def testMEDFileFields1(self):
2877 fname="Pyfile64.med"
2878 f1=MEDCouplingFieldDouble(ON_NODES)
2879 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2880 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2881 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2883 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2885 f1.setName("Field1")
2886 ff1=MEDFileField1TS.New()
2887 ff1.setFieldNoProfileSBT(f1)
2888 self.assertEqual(ff1.getDtUnit(),"us")
2890 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2891 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2893 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2894 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2895 ff1s.setName("Field2")
2897 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2898 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2899 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2900 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2901 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2902 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2903 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2904 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2907 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2909 def testMEDFileFields2(self):
2910 fname="Pyfile65.med"
2911 # to check that all is initialize
2912 MEDFileField1TS().__str__()
2913 MEDFileFieldMultiTS().__str__()
2914 # building a mesh containing 4 tri3 + 5 quad4
2915 tri=MEDCouplingUMesh("tri",2)
2916 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2917 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2918 tris = [tri.deepCopy() for i in range(4)]
2919 for i,elt in enumerate(tris): elt.translate([i,0])
2920 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2921 quad=MEDCouplingUMesh("quad",2)
2922 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2923 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2924 quads = [quad.deepCopy() for i in range(5)]
2925 for i,elt in enumerate(quads): elt.translate([5+i,0])
2926 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2927 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2928 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2930 fmts0_0=MEDFileFieldMultiTS()
2931 fmts0_1=MEDFileFieldMultiTS()
2934 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2935 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2936 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2937 f.setTime(float(i+1)+0.1,i+1,-i-1)
2938 fmts0_0.appendFieldNoProfileSBT(f)
2939 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2940 self.assertEqual(fmts0_1.getName(),name1)
2941 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2942 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2944 # components names have been modified to generate errors
2945 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2946 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2947 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2948 f1ts.setInfo(['aa [bb]','eee [dd]'])
2949 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2951 # add a mismatch of nb of compos
2953 fmts0_2=fmts0_0.deepCopy()
2954 fmts0_3=fmts0_0.deepCopy()
2955 fmts0_4=fmts0_0.deepCopy()
2956 fmts0_5=fmts0_0.shallowCpy()
2957 self.assertTrue(len(fmts0_0)==10 and len(fmts0_1)==10 and len(fmts0_2)==10 and len(fmts0_3)==10 and len(fmts0_4)==10 and len(fmts0_5)==10)
2959 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2960 del fmts0_3[[1.1,(6,-6),9]]
2961 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2962 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2963 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2964 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2965 fmts0_7=fmts0_4[::-3]
2966 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2967 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2970 fs0.pushField(fmts0_0)
2971 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2972 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2973 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2974 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2976 fs0=MEDFileFields(fname)
2977 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2978 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2979 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2980 del fs1[["2ndField",3]]
2981 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2982 fs2=fs0[[0,"4thField"]]
2983 self.assertTrue(isinstance(fs2,MEDFileFields))
2984 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2986 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2989 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2991 def testMEDFileFields3(self):
2992 fname="Pyfile66.med"
2993 # building a mesh containing 4 tri3 + 5 quad4
2994 tri=MEDCouplingUMesh("tri",2)
2995 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2996 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2997 tris = [tri.deepCopy() for i in range(4)]
2998 for i,elt in enumerate(tris): elt.translate([i,0])
2999 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3000 quad=MEDCouplingUMesh("quad",2)
3001 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3002 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3003 quads = [quad.deepCopy() for i in range(5)]
3004 for i,elt in enumerate(quads): elt.translate([5+i,0])
3005 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3006 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3007 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3009 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3011 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3012 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3013 fmts0_0=MEDFileFieldMultiTS()
3014 fmts0_1=MEDFileFieldMultiTS()
3017 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3018 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3019 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3020 f.setTime(float(i+1)+0.1,i+1,-i-1)
3021 fmts0_0.appendFieldProfile(f,mm,0,pfl)
3022 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3023 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3024 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3027 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3028 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3029 fmts0_0.zipPflsNames()
3030 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3031 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3032 fmts0_2=fmts0_0.deepCopy()
3033 fmts0_3=fmts0_0.deepCopy()
3034 fmts0_4=fmts0_0.deepCopy()
3036 fs0.pushField(fmts0_0)
3037 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3038 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3039 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3040 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3042 fmts0_5=MEDFileFieldMultiTS()
3044 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3045 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3046 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3047 f.setTime(float(i+1)+0.1,i+1,-i-1)
3048 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3050 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3051 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3052 fs0.checkGlobsCoherency()
3057 def testSplitComponents1(self):
3058 fname="Pyfile67.med"
3059 # building a mesh containing 4 tri3 + 5 quad4
3060 tri=MEDCouplingUMesh("tri",2)
3061 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3062 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3063 tris = [tri.deepCopy() for i in range(4)]
3064 for i,elt in enumerate(tris): elt.translate([i,0])
3065 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3066 quad=MEDCouplingUMesh("quad",2)
3067 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3068 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3069 quads = [quad.deepCopy() for i in range(5)]
3070 for i,elt in enumerate(quads): elt.translate([5+i,0])
3071 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3072 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3073 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3075 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3077 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3078 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3080 fmts0_1=MEDFileFieldMultiTS()
3082 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3085 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3086 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3087 f.setTime(float(i+1)+0.1,i+1,-i-1)
3088 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3089 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3091 fs.pushField(fmts0_1)
3092 self.assertEqual(1,len(fs))
3093 l=fmts0_1.splitComponents()
3094 self.assertEqual(3,len(l))
3095 for elt in l: self.assertEqual(10,len(elt))
3096 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3098 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3101 self.assertEqual(4,len(fs))
3102 for elt in fs: self.assertEqual(10,len(elt))
3103 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3104 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3106 fs.write(fname,0) ; del fs
3108 fs1=MEDFileFields(fname)
3109 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3110 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3111 self.assertEqual(4,len(fs1))
3113 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3114 f1ts=fs1[fieldName][i]
3115 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3116 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3117 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3119 f1ts=fs1["1stField"][i]
3120 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3121 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3122 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3127 def testMEDFileFieldConvertTo1(self):
3128 fname="Pyfile68.med"
3129 # building a mesh containing 4 tri3 + 5 quad4
3130 tri=MEDCouplingUMesh("tri",2)
3131 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3132 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3133 tris = [tri.deepCopy() for i in range(4)]
3134 for i,elt in enumerate(tris): elt.translate([i,0])
3135 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3136 quad=MEDCouplingUMesh("quad",2)
3137 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3138 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3139 quads = [quad.deepCopy() for i in range(5)]
3140 for i,elt in enumerate(quads): elt.translate([5+i,0])
3141 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3142 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3143 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3144 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3146 ff0=MEDFileField1TS()
3147 f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3148 f0.checkConsistencyLight()
3149 ff0.setFieldNoProfileSBT(f0)
3151 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3152 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3154 ff0i=ff0.convertToInt()
3155 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3156 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3158 ff1=ff0i.convertToDouble()
3159 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3160 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3162 del arr,f0,ff0,ff1,ff0i,fspExp
3163 ff0=MEDFileField1TS()
3164 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")
3165 f0.checkConsistencyLight()
3166 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3167 ff0.setFieldProfile(f0,mm,0,pfl)
3168 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3169 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3171 ff0i=ff0.convertToInt()
3172 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3173 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3174 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3176 ff1=ff0i.convertToDouble()
3177 self.assertTrue(isinstance(ff1,MEDFileField1TS))
3178 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3179 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3181 ff0=MEDFileFieldMultiTS()
3182 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)
3183 f0.checkConsistencyLight()
3184 ff0.appendFieldProfile(f0,mm,0,pfl)
3185 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)
3186 f0.checkConsistencyLight()
3187 ff0.appendFieldProfile(f0,mm,0,pfl)
3188 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)
3189 f0.checkConsistencyLight()
3190 ff0.appendFieldProfile(f0,mm,0,pfl)
3191 ff1=ff0.convertToInt()
3192 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3193 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3194 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3195 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3196 arr=ff1.getUndergroundDataArray(dt,it)
3197 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3199 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3204 ff1=ff1.convertToDouble()
3205 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3206 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3207 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3208 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3209 arr=ff1.getUndergroundDataArray(dt,it)
3210 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3212 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3214 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3215 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3216 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3217 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3218 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3219 arr=ff1.getUndergroundDataArray(dt,it)
3220 arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3222 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3226 def testMEDFileFieldPartialLoading(self):
3227 fname="Pyfile69.med"
3229 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3231 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3232 # building a mesh containing 30 tri3 + 40 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(30)]
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(40)]
3243 for i,elt in enumerate(quads): elt.translate([40+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) ; mm.write(fname,2)
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)
3255 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3256 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3258 ff0=MEDFileField1TS()
3259 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")
3260 f0.checkConsistencyLight()
3261 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3262 ff0.setFieldProfile(f0,mm,0,pfl)
3263 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3264 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3267 ff0=MEDFileField1TS(fname,False)
3268 self.assertEqual(ff0.getName(),"FieldCell")
3269 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3270 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3271 heap_memory_ref=ff0.getHeapMemorySize()
3272 self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3274 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3275 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3276 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3278 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3279 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3280 heap_memory_ref=ff0.getHeapMemorySize()
3281 self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3283 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3284 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3285 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3287 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3288 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3289 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3290 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3292 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3293 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3294 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3295 ff0.loadArraysIfNecessary() ##
3296 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3297 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3298 heap_memory_ref=ff0.getHeapMemorySize()
3299 self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3301 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3302 self.assertEqual(hmd,-800) # -50*8*2
3304 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3306 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3307 heap_memory_ref=ff0.getHeapMemorySize()
3308 self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3310 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3311 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3313 fieldName="FieldCellMultiTS"
3314 ff0=MEDFileFieldMultiTS()
3316 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)
3317 f0.setTime(float(t)+0.1,t,100+t)
3318 f0.checkConsistencyLight()
3319 ff0.appendFieldNoProfileSBT(f0)
3323 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3324 heap_memory_ref=ff0.getHeapMemorySize()
3325 self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3327 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3330 ffs=MEDFileFields(fname,False)
3331 heap_memory_ref=ffs.getHeapMemorySize()
3332 self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3334 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3338 def testMEDFileMeshReadSelector1(self):
3339 mrs=MEDFileMeshReadSelector()
3340 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3341 mrs.__str__() ; mrs.__repr__()
3343 mrs=MEDFileMeshReadSelector(0)
3344 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())
3345 mrs=MEDFileMeshReadSelector(1)
3346 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3347 mrs=MEDFileMeshReadSelector(2)
3348 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3349 mrs=MEDFileMeshReadSelector(3)
3350 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3351 mrs=MEDFileMeshReadSelector(4)
3352 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3353 mrs=MEDFileMeshReadSelector(5)
3354 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3355 mrs=MEDFileMeshReadSelector(6)
3356 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3357 mrs=MEDFileMeshReadSelector(7)
3358 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3359 mrs=MEDFileMeshReadSelector(8)
3360 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3361 mrs=MEDFileMeshReadSelector(9)
3362 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3363 mrs=MEDFileMeshReadSelector(10)
3364 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3365 mrs=MEDFileMeshReadSelector(11)
3366 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3367 mrs=MEDFileMeshReadSelector(12)
3368 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3369 mrs=MEDFileMeshReadSelector(13)
3370 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3371 mrs=MEDFileMeshReadSelector(14)
3372 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3373 mrs=MEDFileMeshReadSelector(15)
3374 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3375 mrs=MEDFileMeshReadSelector(16)
3376 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3377 mrs=MEDFileMeshReadSelector(17)
3378 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3379 mrs=MEDFileMeshReadSelector(18)
3380 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3381 mrs=MEDFileMeshReadSelector(19)
3382 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3383 mrs=MEDFileMeshReadSelector(20)
3384 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3385 mrs=MEDFileMeshReadSelector(21)
3386 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3387 mrs=MEDFileMeshReadSelector(22)
3388 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3389 mrs=MEDFileMeshReadSelector(23)
3390 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3391 mrs=MEDFileMeshReadSelector(24)
3392 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3393 mrs=MEDFileMeshReadSelector(25)
3394 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3395 mrs=MEDFileMeshReadSelector(26)
3396 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3397 mrs=MEDFileMeshReadSelector(27)
3398 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3399 mrs=MEDFileMeshReadSelector(28)
3400 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3401 mrs=MEDFileMeshReadSelector(29)
3402 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3403 mrs=MEDFileMeshReadSelector(30)
3404 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3405 mrs=MEDFileMeshReadSelector(31)
3406 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3407 mrs=MEDFileMeshReadSelector(32)
3408 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3409 mrs=MEDFileMeshReadSelector(33)
3410 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3411 mrs=MEDFileMeshReadSelector(34)
3412 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3413 mrs=MEDFileMeshReadSelector(35)
3414 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3415 mrs=MEDFileMeshReadSelector(36)
3416 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3417 mrs=MEDFileMeshReadSelector(37)
3418 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3419 mrs=MEDFileMeshReadSelector(38)
3420 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3421 mrs=MEDFileMeshReadSelector(39)
3422 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3423 mrs=MEDFileMeshReadSelector(40)
3424 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3425 mrs=MEDFileMeshReadSelector(41)
3426 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3427 mrs=MEDFileMeshReadSelector(42)
3428 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3429 mrs=MEDFileMeshReadSelector(43)
3430 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3431 mrs=MEDFileMeshReadSelector(44)
3432 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3433 mrs=MEDFileMeshReadSelector(45)
3434 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3435 mrs=MEDFileMeshReadSelector(46)
3436 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3437 mrs=MEDFileMeshReadSelector(47)
3438 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3439 mrs=MEDFileMeshReadSelector(48)
3440 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3441 mrs=MEDFileMeshReadSelector(49)
3442 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3443 mrs=MEDFileMeshReadSelector(50)
3444 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3445 mrs=MEDFileMeshReadSelector(51)
3446 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3447 mrs=MEDFileMeshReadSelector(52)
3448 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3449 mrs=MEDFileMeshReadSelector(53)
3450 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3451 mrs=MEDFileMeshReadSelector(54)
3452 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3453 mrs=MEDFileMeshReadSelector(55)
3454 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3455 mrs=MEDFileMeshReadSelector(56)
3456 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3457 mrs=MEDFileMeshReadSelector(57)
3458 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3459 mrs=MEDFileMeshReadSelector(58)
3460 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3461 mrs=MEDFileMeshReadSelector(59)
3462 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3463 mrs=MEDFileMeshReadSelector(60)
3464 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3465 mrs=MEDFileMeshReadSelector(61)
3466 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3467 mrs=MEDFileMeshReadSelector(62)
3468 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3469 mrs=MEDFileMeshReadSelector(63)
3470 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3472 mrs=MEDFileMeshReadSelector(63)
3473 mrs.setCellFamilyFieldReading(False)
3474 self.assertEqual(mrs.getCode(),62)
3475 mrs.setCellFamilyFieldReading(True)
3476 self.assertEqual(mrs.getCode(),63)
3477 mrs.setNodeFamilyFieldReading(False)
3478 self.assertEqual(mrs.getCode(),61)
3479 mrs.setNodeFamilyFieldReading(True)
3480 self.assertEqual(mrs.getCode(),63)
3481 mrs.setCellNameFieldReading(False)
3482 self.assertEqual(mrs.getCode(),59)
3483 mrs.setCellNameFieldReading(True)
3484 self.assertEqual(mrs.getCode(),63)
3485 mrs.setNodeNameFieldReading(False)
3486 self.assertEqual(mrs.getCode(),55)
3487 mrs.setNodeNameFieldReading(True)
3488 self.assertEqual(mrs.getCode(),63)
3489 mrs.setCellNumFieldReading(False)
3490 self.assertEqual(mrs.getCode(),47)
3491 mrs.setCellNumFieldReading(True)
3492 self.assertEqual(mrs.getCode(),63)
3493 mrs.setNodeNumFieldReading(False)
3494 self.assertEqual(mrs.getCode(),31)
3495 mrs.setNodeNumFieldReading(True)
3496 self.assertEqual(mrs.getCode(),63)
3500 def testPartialReadOfMeshes(self):
3501 fname="Pyfile70.med"
3502 # building a mesh containing 4 tri3 + 5 quad4
3503 tri=MEDCouplingUMesh("tri",2)
3504 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3505 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3506 tris = [tri.deepCopy() for i in range(4)]
3507 for i,elt in enumerate(tris): elt.translate([i,0])
3508 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3509 quad=MEDCouplingUMesh("quad",2)
3510 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3511 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3512 quads = [quad.deepCopy() for i in range(5)]
3513 for i,elt in enumerate(quads): elt.translate([5+i,0])
3514 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3515 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3516 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3517 m1=m.buildDescendingConnectivity()[0]
3518 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3520 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3521 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3522 mm.setGroupsAtLevel(0,[grp0,grp1])
3523 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3524 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3525 mm.setGroupsAtLevel(-1,[grp2,grp3])
3526 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3527 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3528 mm.setGroupsAtLevel(1,[grp4,grp5])
3529 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3530 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3531 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3535 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3536 b4_ref_heap_mem=mm.getHeapMemorySize()
3537 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3538 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3539 ref_heap_mem=mm.getHeapMemorySize()
3540 # check the gain of memory using 1GTUMesh instead of UMesh
3541 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
3543 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3544 self.assertEqual(len(mm.getGroupsNames()),0)
3545 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3546 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3547 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3548 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3549 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3550 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3551 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3552 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3553 delta1=ref_heap_mem-mm.getHeapMemorySize()
3554 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3556 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3557 self.assertEqual(len(mm.getGroupsNames()),6)
3558 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3559 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3560 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3561 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3562 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3563 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3564 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3565 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3566 delta2=ref_heap_mem-mm.getHeapMemorySize()
3567 self.assertTrue(delta2<delta1)
3568 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3570 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3571 self.assertEqual(len(mm.getGroupsNames()),6)
3572 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3573 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3574 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3575 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3576 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3577 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3578 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3579 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3580 delta3=ref_heap_mem-mm.getHeapMemorySize()
3581 self.assertTrue(delta3<delta2)
3582 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3584 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3585 self.assertEqual(len(mm.getGroupsNames()),6)
3586 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3587 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3588 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3589 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3590 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3591 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3592 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3593 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3594 delta4=ref_heap_mem-mm.getHeapMemorySize()
3595 self.assertTrue(delta4<delta3)
3596 self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3598 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3599 self.assertEqual(len(mm.getGroupsNames()),6)
3600 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3601 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3602 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3603 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3604 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3605 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3606 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3607 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3608 delta5=ref_heap_mem-mm.getHeapMemorySize()
3609 self.assertTrue(delta5<delta4)
3610 self.assertEqual(delta5,0)
3613 # this test checks that setFieldProfile perform a check of the array length
3614 # compared to the profile length. This test also checks that mesh attribute of field
3615 # is not used by setFieldProfile (because across this test mesh is equal to None)
3617 def testCheckCompatibilityPfl1(self):
3618 # building a mesh containing 4 tri3 + 5 quad4
3619 tri=MEDCouplingUMesh("tri",2)
3620 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3621 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3622 tris = [tri.deepCopy() for i in range(4)]
3623 for i,elt in enumerate(tris): elt.translate([i,0])
3624 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3625 quad=MEDCouplingUMesh("quad",2)
3626 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3627 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3628 quads = [quad.deepCopy() for i in range(5)]
3629 for i,elt in enumerate(quads): elt.translate([5+i,0])
3630 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3631 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3632 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3633 m1=m.buildDescendingConnectivity()[0]
3634 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3636 f1ts=MEDFileField1TS()
3637 f=MEDCouplingFieldDouble(ON_NODES)
3638 vals=DataArrayDouble(7) ; vals.iota(1000)
3640 f.setName("anonymous") # f has no mesh it is not a bug
3641 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3642 f1ts.setFieldProfile(f,mm,0,pfl)
3644 f1ts=MEDFileField1TS()
3645 f=MEDCouplingFieldDouble(ON_NODES)
3646 vals=DataArrayDouble(8) ; vals.iota(1000)
3648 f.setName("anonymous") # f has no mesh it is not a bug
3649 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3650 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3652 f1ts=MEDFileField1TS()
3653 f=MEDCouplingFieldDouble(ON_CELLS)
3654 vals=DataArrayDouble(7) ; vals.iota(1000)
3656 f.setName("anonymous") # f has no mesh it is not a bug
3657 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3658 f1ts.setFieldProfile(f,mm,0,pfl)
3659 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3661 f1ts=MEDFileField1TS()
3662 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3663 vals=DataArrayDouble(27) ; vals.iota(1000)
3665 f.setName("anonymous") # f has no mesh it is not a bug
3666 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3668 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])
3669 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3670 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])
3672 f1ts.setFieldProfile(f,mm,0,pfl)
3673 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3674 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3675 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3676 vals=DataArrayDouble(27) ; vals.iota(1000)
3677 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3679 f1ts=MEDFileField1TS()
3680 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3681 vals=DataArrayDouble(25) ; vals.iota(1000)
3683 f.setName("anonymous") # f has no mesh it is not a bug
3684 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3685 f1ts.setFieldProfile(f,mm,0,pfl)
3686 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3687 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3689 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3690 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3692 f1ts=MEDFileField1TS()
3693 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3694 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3696 f1ts.setFieldProfile(f,mm,0,pfl)
3700 def testWRMeshWithNoCells(self):
3701 fname="Pyfile71.med"
3702 a=DataArrayDouble(4) ; a.iota()
3703 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3704 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3706 m.setMeshAtLevel(0,m00)
3707 m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3708 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3712 m=MEDFileMesh.New(fname)
3713 self.assertEqual((),m.getNonEmptyLevels())
3714 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))
3715 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3716 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3720 def testWRQPolyg1(self):
3721 fname="Pyfile72.med"
3722 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3723 m.insertNextCell([0,2,1,3])
3724 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3726 ms = [m.deepCopy() for i in range(4)]
3727 for i,elt in enumerate(ms):
3728 elt.translate([float(i)*1.5,0.])
3730 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3731 m0.convertAllToPoly()
3733 ms = [m.deepCopy() for i in range(5)]
3734 for i,elt in enumerate(ms):
3735 elt.translate([float(i)*1.5,1.5])
3737 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3738 m1.convertAllToPoly()
3739 m1.convertLinearCellsToQuadratic()
3741 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3744 mm.setMeshAtLevel(0,m)
3745 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3746 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3747 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3748 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3753 mm_read=MEDFileUMesh(fname)
3754 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3755 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3756 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3757 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3759 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3761 arr0=DataArrayDouble(9) ; arr0.iota()
3762 arr1=DataArrayDouble(9) ; arr1.iota(100)
3763 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3764 f.setArray(arr) ; f.checkConsistencyLight()
3766 ff=MEDFileField1TS()
3767 ff.setFieldNoProfileSBT(f)
3770 ff_read=MEDFileField1TS(fname)
3771 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3772 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3776 def testLoadIfNecessaryOnFromScratchFields0(self):
3778 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3780 fname="Pyfile77.med"
3781 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3782 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3784 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3785 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3786 m.finishInsertingCells()
3788 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3789 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3793 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3794 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3796 f0.setName("myELNOField")
3797 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3798 f0.setArray(arrs[0])
3799 ff0.appendFieldNoProfileSBT(f0)
3802 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3803 f0.setArray(arrs[1])
3804 ff0.appendFieldNoProfileSBT(f0)
3807 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3808 f0.setArray(arrs[2])
3809 ff0.appendFieldNoProfileSBT(f0)
3812 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3813 f0.setArray(arrs[3])
3814 ff0.appendFieldNoProfileSBT(f0)
3816 for i,arr in enumerate(arrs):
3817 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3818 fs[0][i].loadArraysIfNecessary()
3819 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3821 fs.loadArraysIfNecessary()
3822 for i,arr in enumerate(arrs):
3823 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3825 fs[0].loadArraysIfNecessary()
3826 for i,arr in enumerate(arrs):
3827 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3832 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3833 """ 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.
3835 fname="Pyfile78.med"
3836 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)
3837 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3838 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3840 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
3841 m0.insertNextCell(NORM_TETRA4,elt)
3843 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
3844 m0.insertNextCell(NORM_PYRA5,elt)
3846 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
3847 m0.insertNextCell(NORM_PENTA6,elt)
3849 m0.checkConsistency()
3850 m1=MEDCouplingUMesh(); m1.setName("mesh")
3851 m1.setMeshDimension(2);
3852 m1.allocateCells(5);
3853 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3854 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3855 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3856 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3857 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3858 m1.setCoords(coords);
3859 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3861 m3.insertNextCell(NORM_POINT1,[2])
3862 m3.insertNextCell(NORM_POINT1,[3])
3863 m3.insertNextCell(NORM_POINT1,[4])
3864 m3.insertNextCell(NORM_POINT1,[5])
3867 mm.setMeshAtLevel(0,m0)
3868 mm.setMeshAtLevel(-1,m1)
3869 mm.setMeshAtLevel(-3,m3)
3871 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3872 mm=MEDFileMesh.New(fname)
3874 fmts=MEDFileFieldMultiTS()
3875 f1ts=MEDFileField1TS()
3876 for lev in mm.getNonEmptyLevels():
3877 for gt in mm.getGeoTypesAtLevel(lev):
3878 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3879 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3880 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3881 f.setArray(arr) ; f.setName("f0")
3882 f1ts.setFieldNoProfileSBT(f)
3885 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3886 for lev in [0,-1,-3]:
3887 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3889 fmts.pushBackTimeStep(f1ts)
3893 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3894 fs=MEDFileFields(fname)
3895 self.assertEqual(len(fs),1)
3896 self.assertEqual(len(fs[0]),1)
3898 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),'','')])])
3899 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))
3903 def testMEDFileUMeshSetName(self):
3904 """ 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.
3905 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3907 fname="Pyfile79.med"
3908 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3910 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3911 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)
3912 m0.allocateCells(5);
3913 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3914 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3915 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3916 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3917 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3918 m0.setCoords(coords);
3919 mm.setMeshAtLevel(0,m0)
3920 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3922 m2.insertNextCell(NORM_POINT1,[2])
3923 m2.insertNextCell(NORM_POINT1,[3])
3924 m2.insertNextCell(NORM_POINT1,[4])
3925 m2.insertNextCell(NORM_POINT1,[5])
3926 mm.setMeshAtLevel(-2,m2)
3927 self.assertEqual(mm.getName(),"")
3928 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3929 mm.forceComputationOfParts()
3930 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3932 self.assertEqual(mm.getName(),"abc")
3933 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3934 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3935 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3936 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3940 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3941 fileName="Pyfile80.med"
3942 m=MEDCouplingCMesh() ; m.setName("cmesh")
3943 arr=DataArrayDouble(6) ; arr.iota()
3944 m.setCoords(arr,arr)
3945 nbCells=m.getNumberOfCells()
3946 self.assertEqual(25,nbCells)
3947 f=MEDCouplingFieldDouble(ON_CELLS)
3948 f.setName("FieldOnCell") ; f.setMesh(m)
3949 arr=DataArrayDouble(nbCells) ; arr.iota()
3953 fmts=MEDFileFieldMultiTS()
3955 for i in range(nbCells):
3956 t=(float(i)+0.1,i+1,-i-2)
3958 arr2=DataArrayDouble(nbCells)
3959 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3962 f1ts=MEDFileField1TS()
3963 f1ts.setFieldNoProfileSBT(f)
3964 fmts.pushBackTimeStep(f1ts)
3966 fmts.unloadArraysWithoutDataLoss()
3967 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))
3968 fs=MEDFileFields() ; fs.pushField(fmts)
3969 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))
3970 fs.unloadArraysWithoutDataLoss()
3971 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))
3973 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))
3974 f1ts.unloadArraysWithoutDataLoss()
3975 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))
3976 mm.write(fileName,2)
3977 fs.write(fileName,0)
3978 del m,fmts,mm,f,f1ts
3980 mm=MEDFileMesh.New(fileName)
3981 fmts=MEDFileFieldMultiTS(fileName)
3982 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))
3983 fmts.unloadArraysWithoutDataLoss()
3984 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3985 fmts.loadArraysIfNecessary()
3986 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))
3988 fs=MEDFileFields(fileName)
3989 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3990 fs.unloadArraysWithoutDataLoss()
3991 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3992 fs.loadArraysIfNecessary()
3993 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))
3995 f1ts=MEDFileField1TS(fileName)
3996 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))
3997 f1ts.unloadArraysWithoutDataLoss()
3998 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3999 f1ts.loadArraysIfNecessary()
4000 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))
4004 def testMEDFileUMeshLoadPart1(self):
4005 """ 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
4006 memory of the returned instance.
4008 fileName="Pyfile81.med"
4009 arr=DataArrayDouble(6) ; arr.iota()
4010 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4011 m=m.buildUnstructured()
4013 m.changeSpaceDimension(3,0.)
4014 infos=["aa [b]","cc [de]","gg [klm]"]
4015 m.getCoords().setInfoOnComponents(infos)
4016 m.checkConsistency()
4018 mm.setMeshAtLevel(0,m)
4019 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4020 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4021 mm.setMeshAtLevel(-1,m1)
4022 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])
4023 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])
4024 namesCellL0=DataArrayAsciiChar(25,16)
4025 namesCellL0[:] = ["Cell#%.3d " % (i) for i in range(25)]
4026 renumM1=DataArrayInt([3,4,0,2,1])
4027 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4028 mm.setRenumFieldArr(0,renum0)
4029 mm.setFamilyFieldArr(0,famField0)
4030 mm.setNameFieldAtLevel(0,namesCellL0)
4031 mm.setRenumFieldArr(-1,renumM1)
4032 mm.setFamilyFieldArr(-1,famFieldM1)
4033 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])
4034 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])
4035 namesNodes=DataArrayAsciiChar(36,16)
4036 namesNodes[:] = ["Node#%.3d " % (i) for i in range(36)]
4037 mm.setRenumFieldArr(1,renum1)
4038 mm.setFamilyFieldArr(1,famField1)
4039 mm.setNameFieldAtLevel(1,namesNodes)
4040 mm.setFamilyId("Fam7",77)
4041 mm.setFamilyId("Fam8",88)
4042 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4043 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4044 mm.write(fileName,2)
4046 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4047 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4048 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])))
4049 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)
4050 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4051 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4052 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4053 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4054 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4055 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4056 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4058 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4059 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4060 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])))
4061 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)
4062 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4063 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4064 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4065 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4066 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4067 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4068 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4070 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4071 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4072 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4073 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4074 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4075 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4076 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4077 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4078 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])))
4079 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4080 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)
4081 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4082 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4083 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4084 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4088 def testMEDFileFieldsLoadPart1(self):
4089 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4091 fileName="Pyfile82.med"
4093 compos=["aa [kg]","bbb [m/s]"]
4094 arr=DataArrayDouble(6) ; arr.iota()
4095 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4096 m=m.buildUnstructured()
4098 m.changeSpaceDimension(3,0.)
4099 infos=["aa [b]","cc [de]","gg [klm]"]
4100 m.getCoords().setInfoOnComponents(infos)
4101 m.checkConsistency()
4102 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4104 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4105 arr[:,0]=list(range(25))
4106 arr[:,1]=list(range(100,125))
4108 WriteField(fileName,f,True)
4109 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4110 f.setName("FieldNode")
4111 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4112 arr[:,0]=list(range(200,236))
4113 arr[:,1]=list(range(300,336))
4115 f.checkConsistencyLight()
4116 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4119 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4121 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4122 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4125 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4127 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4129 fs[0][0].loadArrays()
4130 arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4131 arr.setInfoOnComponents(compos)
4132 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4133 fs[1][0].loadArrays()
4134 arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4135 arr.setInfoOnComponents(compos)
4136 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4140 def testMEDFileWithoutCells1(self):
4141 fileName="Pyfile83.med"
4142 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4143 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4147 mm.write(fileName,2)
4149 mm=MEDFileMesh.New(fileName)
4150 self.assertEqual(mm.getName(),"mesh")
4151 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4155 def testZipCoordsWithLoadPart1(self):
4156 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4158 fileName="Pyfile84.med"
4160 compos=["aa [kg]","bbb [m/s]"]
4161 arr=DataArrayDouble(6) ; arr.iota()
4162 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4163 m=m.buildUnstructured()
4165 m.changeSpaceDimension(3,0.)
4166 infos=["aa [b]","cc [de]","gg [klm]"]
4167 m.getCoords().setInfoOnComponents(infos)
4168 m.checkConsistency()
4169 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4171 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4172 arr[:,0]=list(range(25))
4173 arr[:,1]=list(range(100,125))
4175 WriteField(fileName,f,True)
4176 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4177 f.setName("FieldNode")
4178 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4179 arr[:,0]=list(range(200,236))
4180 arr[:,1]=list(range(300,336))
4182 f.checkConsistencyLight()
4183 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4186 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4188 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4189 self.assertEqual(spd.getSlice(),slice(4,6,1))
4190 spd=mm.getPartDefAtLevel(1)
4191 self.assertEqual(spd.getSlice(),slice(4,14,1))
4192 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4193 mm.zipCoords() # <- The important line is here !
4194 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4195 self.assertEqual(spd.getSlice(),slice(4,6,1))
4196 spd=mm.getPartDefAtLevel(1)
4197 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4198 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4199 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4200 fs[0][0].loadArrays()
4201 arr=DataArrayDouble([(4,104),(5,105)])
4202 arr.setInfoOnComponents(compos)
4203 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4204 fs[1][0].loadArrays()
4205 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4206 arr.setInfoOnComponents(compos)
4207 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4208 m_ref = mm[0].deepCopy()
4209 # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4211 mrs = MEDFileMeshReadSelector()
4212 mrs.setNumberOfCoordsLoadSessions(2)
4213 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4215 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4216 self.assertEqual(spd.getSlice(),slice(4,6,1))
4217 spd=mm.getPartDefAtLevel(1)
4218 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4219 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4220 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4221 fs[0][0].loadArrays()
4222 arr=DataArrayDouble([(4,104),(5,105)])
4223 arr.setInfoOnComponents(compos)
4224 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4225 fs[1][0].loadArrays()
4226 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4227 arr.setInfoOnComponents(compos)
4228 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4229 self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4233 def testMEDFileCMeshSetGroupsAtLevel(self):
4234 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4236 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4238 mm=MEDFileCMesh() ; mm.setMesh(m)
4239 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4240 mm.setGroupsAtLevel(0,[grp])
4241 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4245 def testMEDFileUMeshBuildExtrudedMesh1(self):
4246 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4247 fileName="Pyfile85.med"
4250 meshName3DOut="Mesh3D"
4252 d1=DataArrayInt([0,4,20,24])
4253 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4255 a=DataArrayDouble(6) ; a.iota()
4256 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4257 m=m.buildUnstructured()
4258 d1c=d1.buildComplement(m.getNumberOfCells())
4259 m=m[d1c] ; m.zipCoords()
4260 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4262 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4263 m.setName(meshName2D)
4264 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4265 e=d.deltaShiftIndex().findIdsEqual(1)
4268 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4269 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4270 mm.setGroupsAtLevel(0,[grp0])
4271 grp1=e ; grp1.setName("grp1")
4272 mm.setGroupsAtLevel(-1,[grp1])
4273 mm.write(fileName,2)
4275 a=DataArrayDouble(3) ; a.iota()
4276 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4277 tmp.setName(meshName1D)
4278 tmp.changeSpaceDimension(3)
4279 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4281 mm1D.setMeshAtLevel(0,tmp)
4282 mm1D.write(fileName,0)
4284 mm2D=MEDFileMesh.New(fileName,meshName2D)
4285 mm1D=MEDFileMesh.New(fileName,meshName1D)
4286 m1D=mm1D.getMeshAtLevel(0)
4287 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4289 self.assertEqual(mm3D.getName(),mm2D.getName())
4290 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4291 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4292 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4293 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4294 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4295 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4296 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4297 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4298 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4299 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.)])
4300 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4301 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])
4302 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4303 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])
4304 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4305 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])
4306 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4307 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])
4308 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4309 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])
4310 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4311 d=DataArrayInt(129) ; d.iota() ; d*=3
4312 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4314 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4315 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4316 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4317 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4318 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])))
4319 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])))
4320 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])))
4321 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])))
4322 mm3D.setName("MeshExtruded")
4323 mm3D.write(fileName,0)
4326 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4328 def testMEDFileUMeshPickeling1(self):
4329 outFileName="Pyfile86.med"
4330 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)
4331 c.setInfoOnComponents(["aa","bbb"])
4332 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4333 m=MEDCouplingUMesh();
4334 m.setMeshDimension(2);
4336 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4337 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4338 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4339 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4340 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4341 m.finishInsertingCells();
4343 m.checkConsistencyLight()
4344 m1=MEDCouplingUMesh.New();
4345 m1.setMeshDimension(1);
4346 m1.allocateCells(3);
4347 m1.insertNextCell(NORM_SEG2,2,[1,4])
4348 m1.insertNextCell(NORM_SEG2,2,[3,6])
4349 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4350 m1.finishInsertingCells();
4352 m1.checkConsistencyLight()
4353 m2=MEDCouplingUMesh.New();
4354 m2.setMeshDimension(0);
4355 m2.allocateCells(4);
4356 m2.insertNextCell(NORM_POINT1,1,[1])
4357 m2.insertNextCell(NORM_POINT1,1,[3])
4358 m2.insertNextCell(NORM_POINT1,1,[2])
4359 m2.insertNextCell(NORM_POINT1,1,[6])
4360 m2.finishInsertingCells();
4362 m2.checkConsistencyLight()
4364 mm=MEDFileUMesh.New()
4365 self.assertTrue(mm.getUnivNameWrStatus())
4366 mm.setName("MyFirstMEDCouplingMEDmesh")
4367 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4371 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4373 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4374 # playing with groups
4375 g1_2=DataArrayInt.New()
4376 g1_2.setValues([1,3],2,1)
4378 g2_2=DataArrayInt.New()
4379 g2_2.setValues([1,2,3],3,1)
4381 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4382 g1_1=DataArrayInt.New()
4383 g1_1.setValues([0,1,2],3,1)
4385 g2_1=DataArrayInt.New()
4386 g2_1.setValues([0,2],2,1)
4388 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4389 g1_N=DataArrayInt.New()
4390 g1_N.setValues(list(range(8)),8,1)
4392 g2_N=DataArrayInt.New()
4393 g2_N.setValues(list(range(9)),9,1)
4395 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4396 mm.createGroupOnAll(0,"GrpOnAllCell")
4397 # check content of mm
4398 t=mm.getGroupArr(0,"G1",False)
4399 self.assertTrue(g1_2.isEqual(t));
4400 t=mm.getGroupArr(0,"G2",False)
4401 self.assertTrue(g2_2.isEqual(t));
4402 t=mm.getGroupArr(-1,"G1",False)
4403 self.assertTrue(g1_1.isEqual(t));
4404 t=mm.getGroupArr(-1,"G2",False)
4405 self.assertTrue(g2_1.isEqual(t));
4406 t=mm.getGroupArr(1,"G1",False)
4407 self.assertTrue(g1_N.isEqual(t));
4408 t=mm.getGroupArr(1,"G2",False)
4409 self.assertTrue(g2_N.isEqual(t));
4410 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4411 t=mm.getGroupArr(0,"GrpOnAllCell")
4413 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4414 mm2=pickle.loads(st)
4415 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4416 self.assertEqual(mm.getAxisType(),AX_CART)
4418 mm.setAxisType(AX_CYL)
4419 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4420 mm2=pickle.loads(st)
4421 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4422 self.assertEqual(mm2.getAxisType(),AX_CYL)
4426 def testMEDFileFieldsLoadSpecificEntities1(self):
4429 fileName="Pyfile87.med"
4433 m=MEDCouplingCMesh()
4434 arr=DataArrayDouble(nbNodes) ; arr.iota()
4436 m=m.buildUnstructured()
4439 fmts=MEDFileFieldMultiTS()
4440 for i in range(nbPdt):
4441 f=MEDCouplingFieldDouble(ON_NODES)
4443 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4445 f.setName(fieldName)
4446 f.setTime(float(i),i,0)
4447 fmts.appendFieldNoProfileSBT(f)
4450 mm=MEDFileUMesh() ; mm[0]=m
4451 fmts.write(fileName,2)
4452 mm.write(fileName,0)
4454 fs=MEDFileFields(fileName,False)
4455 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4456 fs.loadArraysIfNecessary()
4457 fs2.loadArraysIfNecessary()
4458 for i in range(nbPdt):
4459 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4461 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4462 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4463 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4464 fmts=MEDFileFieldMultiTS()
4465 for i in range(nbPdt):
4466 f=MEDCouplingFieldDouble(ON_CELLS)
4468 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4470 f.setName(fieldName)
4471 f.setTime(float(i),i,0)
4472 fmts.appendFieldNoProfileSBT(f)
4474 mm=MEDFileUMesh() ; mm[0]=m3
4476 self.assertEqual(mm.getNonEmptyLevels(),())
4478 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4479 fmts.write(fileName,2)
4480 fs=MEDFileFields(fileName,False)
4481 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4482 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4483 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4484 fs.loadArraysIfNecessary()
4485 fs2.loadArraysIfNecessary()
4486 fs3.loadArraysIfNecessary()
4487 fs4.loadArraysIfNecessary()
4488 for i in range(nbPdt):
4489 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4490 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4491 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4496 def testMEDFileLotsOfTSRW1(self):
4499 fileName="Pyfile88.med"
4500 nbPdt=300 # <- perftest = 30000
4503 maxPdt=100 # <- optimum = 500
4504 m=MEDCouplingCMesh()
4505 arr=DataArrayDouble(nbNodes) ; arr.iota()
4507 m=m.buildUnstructured()
4510 nbOfField=nbPdt//maxPdt
4512 for j in range(nbOfField):
4513 fmts=MEDFileFieldMultiTS()
4514 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4515 for i in range(s.start, s.stop, s.step):
4516 f=MEDCouplingFieldDouble(ON_NODES)
4518 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4520 f.setName("%s_%d"%(fieldName,j))
4521 f.setTime(float(i),i,0)
4522 fmts.appendFieldNoProfileSBT(f)
4527 mm=MEDFileUMesh() ; mm[0]=m
4528 fs.write(fileName,2)
4529 mm.write(fileName,0)
4531 def appendInDict(d,key,val):
4538 allFields=GetAllFieldNames(fileName)
4540 pat=re.compile("([\d]+)([\s\S]+)$")
4541 for st in allFields:
4545 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4548 appendInDict(allFieldsDict,st,'')
4552 for k in allFieldsDict:
4553 if allFieldsDict[k]!=['']:
4554 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4557 for it in allFieldsDict[k]:
4558 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4563 for ii in range(nbIter):
4564 zeResu.pushBackTimeSteps(fmts2.pop())
4567 fs2.pushField(zeResu)
4569 self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4573 def testMEDFileMeshRearrangeFamIds1(self):
4574 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4575 fileName="Pyfile89.med"
4576 meshName='Maillage_2'
4578 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)])
4580 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])
4581 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])
4582 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4583 m0.setConnectivity(c0,c0i)
4586 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])
4587 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])
4588 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4589 m1.setConnectivity(c1,c1i)
4592 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])
4593 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4594 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4595 mm[-2]=m2.buildUnstructured()
4597 ref0=DataArrayInt(55) ; ref0[:]=0
4598 mm.setFamilyFieldArr(0,ref0)
4599 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]))
4600 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])
4601 mm.setFamilyFieldArr(-1,ref1)
4602 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])
4603 mm.setFamilyFieldArr(-2,ref2)
4605 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4606 mm.setFamilyId(f,fid)
4607 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4608 mm.setFamiliesOnGroup(grp,fams)
4609 mm.write(fileName,2)
4611 mm=MEDFileMesh.New(fileName)
4612 grp=mm.getGroup(-1,"Groupe_1")
4613 dai=grp.computeFetchedNodeIds()
4616 mm.rearrangeFamilies() # <- the aim of the test
4617 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4618 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4619 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4620 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4621 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])))
4622 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4623 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4624 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4625 for elt,fams in allGrps:
4626 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4627 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4628 for elt,eltId in allFams:
4629 self.assertEqual(mm.getFamilyId(elt),eltId)
4633 def testNonRegrCMeshSetFieldPfl1(self):
4634 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4635 ff=MEDFileField1TS()
4638 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4642 field=MEDCouplingFieldDouble(ON_CELLS)
4644 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4645 field.setName("Field")
4646 field.checkConsistencyLight()
4647 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4648 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4649 self.assertEqual(ff.getPfls(),())
4650 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4651 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4652 del ff,mm,field,field2,pfl
4653 # same with unstructured mesh
4654 ff=MEDFileField1TS()
4657 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4660 m=m.buildUnstructured()
4662 field=MEDCouplingFieldDouble(ON_CELLS)
4664 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4665 field.setName("Field")
4666 field.checkConsistencyLight()
4667 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4668 ff.setFieldProfile(field,mm,0,pfl)
4669 self.assertEqual(ff.getPfls(),())
4670 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4671 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4675 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4677 fileName="Pyfile90.med"
4678 fileName2="Pyfile91.med"
4679 arr=DataArrayDouble(5) ; arr.iota()
4680 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4681 m=m.buildUnstructured()
4682 d=DataArrayInt([3,7,11,15])
4685 m2=m[d.buildComplement(m.getNumberOfCells())]
4686 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4687 m.changeSpaceDimension(3,0.)
4688 arr=DataArrayDouble(3) ; arr.iota()
4689 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4690 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4691 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4692 m3D=m.buildExtrudedMesh(m1D,0)
4693 m3D.sortCellsInMEDFileFrmt()
4694 m3D.setName(meshName)
4695 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4696 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4697 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4700 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4701 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4702 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4703 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4704 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4705 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4706 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4707 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4708 mm.setGroupsAtLevel(0,[vol1,vol2])
4709 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4710 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4712 mmOut1=mm.linearToQuadratic(0,0.)
4713 mmOut1.write(fileName2,2)
4714 mmOut2=mmOut1.quadraticToLinear(0.)
4715 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4719 def testMEDFileMeshAddGroup1(self):
4720 m=MEDCouplingCMesh()
4721 arrX=DataArrayDouble(9) ; arrX.iota()
4722 arrY=DataArrayDouble(4) ; arrY.iota()
4723 m.setCoords(arrX,arrY)
4727 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4729 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4731 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4733 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4735 for grp in [grp0,grp1,grp2,grp3]:
4736 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4737 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4739 for grp in [grp0,grp1,grp2,grp3]:
4740 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4741 mm.addGroup(1,grpNode)
4742 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4743 for grp in [grp0,grp1,grp2,grp3]:
4744 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4745 for grp in [grp0,grp1,grp2,grp3]:
4746 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4747 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4748 mm.normalizeFamIdsMEDFile()
4749 for grp in [grp0,grp1,grp2,grp3]:
4750 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4751 for grp in [grp0,grp1,grp2,grp3]:
4752 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4753 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4757 def testMEDFileJoint1(self):
4758 fileName="Pyfile92.med"
4759 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4760 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4764 mm.setDescription("un maillage")
4765 mm.write(fileName,2)
4766 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4767 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4768 one_step_joint=MEDFileJointOneStep()
4769 one_step_joint.pushCorrespondence(cell_correspond)
4770 one_step_joint.pushCorrespondence(node_correspond)
4771 one_joint=MEDFileJoint()
4772 one_joint.pushStep(one_step_joint)
4773 one_joint.setLocalMeshName("maa1")
4774 one_joint.setRemoteMeshName("maa1")
4775 one_joint.setDescription("joint_description")
4776 one_joint.setJointName("joint_1")
4777 one_joint.setDomainNumber(1)
4778 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4779 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4780 self.assertEqual( one_joint.getDescription(), "joint_description")
4781 self.assertEqual( one_joint.getJointName(), "joint_1")
4782 self.assertEqual( one_joint.getDomainNumber(), 1)
4783 joints=MEDFileJoints()
4784 joints.pushJoint(one_joint);
4785 joints.write(fileName,0)
4787 jointsR=MEDFileJoints(fileName,mm.getName())
4788 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4789 jR = jointsR.getJointAtPos(0)
4790 self.assertTrue( jR.isEqual( one_joint ))
4791 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4792 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4793 jointsR.destroyJointAtPos(0)
4797 def testMEDFileJoint2(self):
4798 fileNameWr="Pyfile93.med"
4799 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4800 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4804 mm.setDescription("un maillage")
4805 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4806 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4807 one_step_joint=MEDFileJointOneStep()
4808 two_step_joint=MEDFileJointOneStep()
4809 one_joint=MEDFileJoint()
4810 two_joint=MEDFileJoint()
4811 one_step_joint.pushCorrespondence(node_correspond)
4812 one_joint.pushStep(one_step_joint)
4813 two_step_joint.pushCorrespondence(cell_correspond)
4814 two_step_joint.pushCorrespondence(node_correspond)
4815 two_joint.pushStep(two_step_joint)
4816 one_joint.setLocalMeshName("maa1")
4817 one_joint.setRemoteMeshName("maa1")
4818 one_joint.setDescription("joint_description_1")
4819 one_joint.setJointName("joint_1")
4820 one_joint.setDomainNumber(1)
4821 two_joint.setLocalMeshName("maa1")
4822 two_joint.setRemoteMeshName("maa1")
4823 two_joint.setDescription("joint_description_2")
4824 two_joint.setJointName("joint_2")
4825 two_joint.setDomainNumber(2)
4826 joints=MEDFileJoints()
4827 joints.pushJoint(one_joint)
4828 joints.pushJoint(two_joint)
4829 mm.setJoints( joints )
4830 mm.write(fileNameWr,2)
4832 mm=MEDFileMesh.New(fileNameWr)
4833 self.assertEqual( mm.getNumberOfJoints(), 2)
4834 jointsR = mm.getJoints();
4835 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4836 self.assertEqual( len( jointsR ), 2 )
4837 jointR1 = jointsR[0]
4838 jointR2 = jointsR[1]
4839 self.assertFalse( jointR1 is None )
4840 self.assertFalse( jointR2 is None )
4841 self.assertTrue( jointR1.isEqual( one_joint ))
4842 self.assertTrue( jointR2.isEqual( two_joint ))
4846 def testMEDFileJoint1(self):
4847 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4848 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4849 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4850 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4851 joint1st_1=MEDFileJointOneStep()
4852 joint1st_1.pushCorrespondence(cell_correspond)
4853 joint1st_1.pushCorrespondence(node_correspond)
4854 joint1st_2=MEDFileJointOneStep()
4855 joint1st_2.pushCorrespondence(cell_correspond)
4856 joint1st_2.pushCorrespondence(node_correspond)
4857 joint1st_3=MEDFileJointOneStep()
4858 joint1st_3.pushCorrespondence(node_correspond)
4859 joint1st_3.pushCorrespondence(cell_correspond)
4860 joint1st_4=MEDFileJointOneStep()
4861 joint1st_4.pushCorrespondence(cell_correspond)
4862 joint1st_5=MEDFileJointOneStep()
4863 joint1st_5.pushCorrespondence(cell_correspon2)
4864 joint1st_6=MEDFileJointOneStep()
4865 joint1st_6.pushCorrespondence(cell_correspon3)
4866 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4867 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4868 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4869 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4870 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4871 one_joint=MEDFileJoint()
4872 one_joint.pushStep(joint1st_1)
4873 one_joint.setLocalMeshName("maa1")
4874 one_joint.setRemoteMeshName("maa2")
4875 one_joint.setDescription("joint_description")
4876 one_joint.setJointName("joint_1")
4877 one_joint.setDomainNumber(1)
4878 self.assertEqual( "maa1", one_joint.getLocalMeshName())
4879 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4880 self.assertEqual( "joint_description", one_joint.getDescription())
4881 self.assertEqual( 1, one_joint.getDomainNumber())
4882 self.assertEqual( "joint_1", one_joint.getJointName())
4885 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4887 def testMEDFileSafeCall0(self):
4888 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4889 fname="Pyfile94.med"
4890 errfname="Pyfile94.err"
4893 # first clean file if needed
4894 if os.path.exists(fname):
4897 # second : build a file from scratch
4898 m=MEDCouplingCMesh()
4899 arr=DataArrayDouble(11) ; arr.iota()
4900 m.setCoords(arr,arr)
4905 # third : change permissions to remove write access on created file
4906 os.chmod(fname, 0o444)
4907 # four : try to append data on file -> check that it raises Exception
4908 f=MEDCouplingFieldDouble(ON_CELLS)
4911 f.setArray(DataArrayDouble(100))
4912 f.getArray()[:]=100.
4913 f.checkConsistencyLight()
4914 f1ts=MEDFileField1TS()
4915 f1ts.setFieldNoProfileSBT(f)
4917 tmp=StdOutRedirect(errfname)
4918 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4921 if os.path.exists(errfname):
4927 def testUnivStatus1(self):
4928 """ Non regression test to check the effectiveness of univ write status."""
4929 fname="Pyfile95.med"
4930 arr=DataArrayDouble(10) ; arr.iota()
4931 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4932 mm=MEDFileCMesh() ; mm.setMesh(m)
4933 mm.setUnivNameWrStatus(False) # test is here
4935 mm=MEDFileCMesh(fname)
4936 self.assertEqual(mm.getUnivName(),"")
4937 mm.setUnivNameWrStatus(True)
4939 mm=MEDFileCMesh(fname)
4940 self.assertTrue(mm.getUnivName()!="")
4944 def testEmptyMesh(self):
4945 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4947 fname = "Pyfile96.med"
4948 m = MEDCouplingUMesh('toto', 2)
4949 m.setCoords(DataArrayDouble([], 0, 2))
4950 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4951 mfu = MEDFileUMesh()
4952 mfu.setMeshAtLevel(0, m)
4954 mfu2 = MEDFileUMesh(fname)
4955 self.assertEqual('toto', mfu2.getName())
4956 lvl = mfu2.getNonEmptyLevels()
4957 self.assertEqual((), lvl)
4959 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4960 def testMEDFileUMeshPickeling2(self):
4961 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4967 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4968 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4969 mesh=MEDFileUMesh() ; mesh[0]=m
4970 m1=m.computeSkin() ; mesh[-1]=m1
4972 bary1=m1.computeCellCenterOfMass()[:,2]
4973 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4974 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4975 mesh.setGroupsAtLevel(-1,[grp1,grp2])
4977 st=pickle.dumps(mesh,2)
4979 st2=pickle.dumps(mm,2)
4980 mm2=pickle.loads(st2)
4981 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4985 def testMEDFileEquivalence1(self):
4986 """ First check of equivalence implementation in MEDFileMesh"""
4987 fileName="Pyfile97.med"
4990 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)])
4991 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4992 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])
4993 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4994 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])
4995 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4996 mm.getFamilyFieldAtLevel(-1)[:]=-2
4997 mm.getFamilyFieldAtLevel(0)[:]=0
4998 mm.addFamily("HOMARD________-1",-1)
4999 mm.addFamily("HOMARD________-2",-2)
5000 mm.addFamily("HOMARD________-3",-3)
5001 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5003 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5004 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."
5005 mm.initializeEquivalences()
5006 eqs=mm.getEquivalences()
5007 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5008 eq0.setDescription(descEq)
5009 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)])
5010 eq0.setArray(-1,corr)
5011 self.assertEqual(eq0.getCell().size(),1)
5012 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5013 eq0.getCell().clear()
5014 self.assertEqual(eq0.getCell().size(),0)
5015 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5016 self.assertEqual(eq0.getCell().size(),1)
5017 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5018 mm.killEquivalences()
5019 mm.initializeEquivalences()
5020 eqs=mm.getEquivalences()
5021 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5022 eq0.setDescription(descEq)
5024 c.setArrayForType(NORM_QUAD4,corr)
5025 self.assertEqual(eq0.getCell().size(),1)
5026 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5028 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5029 self.assertEqual(mm2.getEquivalences().size(),1)
5030 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5031 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5032 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5033 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5034 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5035 mm.write(fileName,2)
5037 mm3=MEDFileMesh.New(fileName)
5038 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5042 def testMEDFileForFamiliesPlayer1(self):
5043 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5044 fileName="Pyfile98.med"
5046 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5047 arr=DataArrayDouble(4) ; arr.iota()
5048 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5049 m=m.buildUnstructured()
5052 mm.setName(meshName)
5053 mm.setFamilyId("FAMILLE_ZERO",0)
5054 mm.getFamilyFieldAtLevel(0)[-3:]=-4
5055 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5056 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5057 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5058 mm.setFamilyFieldArr(1,d)
5059 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5060 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5061 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5062 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5063 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5064 mm.write(fileName,2)
5065 # now read such funny file !
5066 mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5067 self.assertTrue(mm.isEqual(mm2,1e-16))
5068 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5069 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5070 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5074 def testCartesianizer1(self):
5075 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5077 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5078 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5079 d0=DataArrayInt(16) ; d0[:]=0
5080 d1=DataArrayInt(9) ; d1[:]=0
5081 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5082 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5083 ref0=mm.getCoords().getHiddenCppPointer()
5084 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5085 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5086 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5087 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5088 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5089 mm.setAxisType(AX_CYL) #<- important
5090 mm2=mm.cartesianize() # the trigger
5091 self.assertEqual(mm2.getAxisType(),AX_CART)
5092 mm.setAxisType(AX_CART) # this is here only to avoid complaints
5093 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5094 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5095 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5096 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5097 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5098 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5099 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5100 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5101 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5102 self.assertEqual(mm2.getName(),mm.getName())
5103 self.assertEqual(mm2.getDescription(),mm.getDescription())
5104 self.assertEqual(mm2.getTime(),mm.getTime())
5105 self.assertEqual(mm2.getTime(),mm.getTime())
5106 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5107 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5108 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5109 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5110 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5111 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5112 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5113 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5115 mm.setAxisType(AX_CART)
5116 mm2=mm.cartesianize() # the trigger
5117 self.assertEqual(mm2.getAxisType(),AX_CART)
5118 self.assertTrue(isinstance(mm2,MEDFileUMesh))
5119 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5120 # CurveLinearMesh non cart
5121 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5122 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5123 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5124 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5125 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5126 mm2=mm.cartesianize() # the trigger
5127 self.assertEqual(mm2.getAxisType(),AX_CART)
5128 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5129 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5130 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5131 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5132 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5133 self.assertEqual(mm2.getName(),mm.getName())
5134 self.assertEqual(mm2.getDescription(),mm.getDescription())
5135 self.assertEqual(mm2.getTime(),mm.getTime())
5136 self.assertEqual(mm2.getTime(),mm.getTime())
5137 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5138 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5139 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5140 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5141 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5142 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5143 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5144 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5145 # CurveLinearMesh cart
5146 mm.setAxisType(AX_CART)
5147 mm2=mm.cartesianize() # the trigger
5148 self.assertEqual(mm2.getAxisType(),AX_CART)
5149 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5150 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5152 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5153 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5154 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5155 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5156 mm2=mm.cartesianize() # the trigger
5157 self.assertEqual(mm2.getAxisType(),AX_CART)
5158 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5159 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5160 self.assertEqual(mm2.getName(),mm.getName())
5161 self.assertEqual(mm2.getDescription(),mm.getDescription())
5162 self.assertEqual(mm2.getTime(),mm.getTime())
5163 self.assertEqual(mm2.getTime(),mm.getTime())
5164 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5165 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5166 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5167 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5168 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5169 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5170 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5171 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5173 mm.setAxisType(AX_CART)
5174 mm2=mm.cartesianize() # the trigger
5175 self.assertEqual(mm2.getAxisType(),AX_CART)
5176 self.assertTrue(isinstance(mm2,MEDFileCMesh))
5177 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5181 def testCheckCoherency(self):
5182 m2 = MEDCouplingUMesh("2d", 2)
5183 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5184 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5185 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5186 mum = MEDFileUMesh()
5187 mum.setMeshAtLevel(0, m2)
5188 mum.setMeshAtLevel(-1, m1)
5189 mum.checkConsistency()
5190 mum2 = mum.deepCopy()
5193 arr = DataArrayInt([2]*4)
5194 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5195 self.assertRaises(InterpKernelException, mum.checkConsistency)
5196 mum=mum2; mum2=mum.deepCopy();
5197 arr = DataArrayInt([2]*4)
5198 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5199 self.assertRaises(InterpKernelException, mum.checkConsistency)
5200 mum=mum2; mum2=mum.deepCopy();
5201 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5202 self.assertRaises(InterpKernelException, mum.checkConsistency)
5203 mum=mum2; mum2=mum.deepCopy();
5204 arr = DataArrayAsciiChar(['tutu x']*4)
5205 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5206 self.assertRaises(InterpKernelException, mum.checkConsistency)
5209 mum=mum2; mum2=mum.deepCopy();
5210 arr = DataArrayInt([2]*2)
5211 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5212 self.assertRaises(InterpKernelException, mum.checkConsistency)
5213 mum=mum2; mum2=mum.deepCopy();
5214 arr = DataArrayInt([2]*2)
5215 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5216 self.assertRaises(InterpKernelException, mum.checkConsistency)
5217 mum=mum2; mum2=mum.deepCopy();
5218 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5219 self.assertRaises(InterpKernelException, mum.checkConsistency)
5220 mum=mum2; mum2=mum.deepCopy();
5221 arr = DataArrayAsciiChar(['tutu x']*2)
5222 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5223 self.assertRaises(InterpKernelException, mum.checkConsistency)
5226 mum=mum2; mum2=mum.deepCopy();
5227 arr = DataArrayInt([2]*5)
5228 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5229 self.assertRaises(InterpKernelException, mum.checkConsistency)
5230 mum=mum2; mum2=mum.deepCopy();
5231 arr = DataArrayInt([2]*5)
5232 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5233 self.assertRaises(InterpKernelException, mum.checkConsistency)
5234 mum=mum2; mum2=mum.deepCopy();
5235 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5236 self.assertRaises(InterpKernelException, mum.checkConsistency)
5237 mum=mum2; mum2=mum.deepCopy();
5238 arr = DataArrayAsciiChar(['tutu x']*5)
5239 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5240 self.assertRaises(InterpKernelException, mum.checkConsistency)
5243 def testCheckSMESHConsistency(self):
5244 m2 = MEDCouplingUMesh("2d", 2)
5245 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5246 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5247 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5248 mum = MEDFileUMesh()
5249 mum.setMeshAtLevel(0, m2)
5250 mum.setMeshAtLevel(-1, m1)
5251 mum.checkConsistency()
5252 mum.checkSMESHConsistency()
5253 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5254 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5255 mum.setRenumFieldArr(0, n2)
5256 mum.setRenumFieldArr(-1, n1)
5257 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5258 mum.setRenumFieldArr(-1, n1+100)
5259 mum.checkSMESHConsistency()
5263 def testClearNodeAndCellNumbers(self):
5264 m2 = MEDCouplingUMesh("2d", 2)
5265 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5266 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5267 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5268 mum = MEDFileUMesh()
5269 mum.setMeshAtLevel(0, m2)
5270 mum.setMeshAtLevel(-1, m1)
5271 mum.checkConsistency()
5272 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5273 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5274 mum.setRenumFieldArr(0, n2)
5275 mum.setRenumFieldArr(-1, n1)
5276 mum.clearNodeAndCellNumbers()
5277 mum.checkSMESHConsistency()
5281 def testCMeshSetFamilyFieldArrNull(self):
5283 fname="Pyfile99.med"
5284 arrX=DataArrayDouble([0,1,2,3])
5285 arrY=DataArrayDouble([0,1,2])
5286 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5287 mm=MEDFileCMesh() ; mm.setMesh(m)
5288 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5289 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5290 mm.setFamilyFieldArr(0,famCellIds)
5291 mm.setFamilyFieldArr(1,famNodeIds)
5293 mm=MEDFileMesh.New(fname)
5294 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5295 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5296 mm.setFamilyFieldArr(0,None)#<- bug was here
5297 mm.setFamilyFieldArr(1,None)#<- bug was here
5298 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5299 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5301 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5302 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5304 mm2=MEDFileMesh.New(fname)
5305 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5306 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5310 def testAppendFieldProfileOnIntField(self):
5311 fname="Pyfile100.med"
5312 arrX=DataArrayDouble([0,1,2,3])
5313 arrY=DataArrayDouble([0,1,2])
5314 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5318 fmts=MEDFileIntFieldMultiTS()
5320 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5321 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5322 fieldName="FieldOnCell"
5323 f.setTime(1.2,1,1) ; f.setName(fieldName)
5324 arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5325 fmts.appendFieldProfile(f,mm,0,pfl)
5330 mm=MEDFileMesh.New(fname)
5331 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5332 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5333 self.assertEqual(fmts.getName(),fieldName)
5334 self.assertEqual(len(fmts),1)
5336 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5337 self.assertEqual(pfltest.getName(),pflName)
5338 self.assertEqual(ftest.getName(),fieldName)
5339 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5340 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5341 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5342 self.assertEqual(ftest2.getTime(),f.getTime())
5343 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5347 def testMEDFileFieldEasyField1(self):
5348 """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."""
5349 ## Basic test on cells on top level
5350 fname="Pyfile101.med"
5353 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5354 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5356 m.insertNextCell(NORM_TRI3,[0,1,2])
5357 m.insertNextCell(NORM_TRI3,[3,4,5])
5358 m.insertNextCell(NORM_TRI3,[6,7,8])
5359 m.insertNextCell(NORM_TRI3,[9,10,11])
5360 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5361 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5364 arr0=DataArrayDouble([10,11,12,13,100,101])
5365 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5366 f.setName(fieldName) ; f.setTime(2.,6,7)
5368 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5370 arr2=arr0+1000 ; f.setArray(arr2)
5371 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5375 mm=MEDFileMesh.New(fname)
5376 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5377 ftst0=f1ts.field(mm)
5378 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5379 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5380 ftst1=f1ts.field(mm)
5381 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5382 fmts=MEDFileFieldMultiTS(fname,fieldName)
5383 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5384 ## Basic test on nodes on top level
5385 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5386 f2.setName(fieldName)
5388 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5390 mm=MEDFileMesh.New(fname)
5391 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5392 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5393 fmts=MEDFileFieldMultiTS(fname,fieldName)
5394 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5396 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)
5397 f3.setName(fieldName) ; f3.checkConsistencyLight()
5398 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5400 mm=MEDFileMesh.New(fname)
5401 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5402 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5404 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5405 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])
5406 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)
5407 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)
5408 f4.checkConsistencyLight()
5409 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5411 mm=MEDFileMesh.New(fname)
5412 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5413 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5417 def testMEDFileFieldEasyField2(self):
5418 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5419 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."""
5420 ## Basic test on cells on top level
5421 fname="Pyfile102.med"
5424 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5425 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5427 m.insertNextCell(NORM_TRI3,[0,1,2])
5428 m.insertNextCell(NORM_TRI3,[3,4,5])
5429 m.insertNextCell(NORM_TRI3,[6,7,8])
5430 m.insertNextCell(NORM_TRI3,[9,10,11])
5431 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5432 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5435 arr0=DataArrayInt32([10,11,12,13,100,101])
5436 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5437 f.setName(fieldName) ; f.setTime(2.,6,7)
5439 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5441 arr2=arr0+1000 ; f.setArray(arr2)
5442 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5446 mm=MEDFileMesh.New(fname)
5447 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5448 ftst0=f1ts.field(mm)
5449 self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5450 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5451 ftst1=f1ts.field(mm)
5452 self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5453 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5454 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5455 ## Basic test on nodes on top level
5456 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5457 f2.setName(fieldName)
5459 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5461 mm=MEDFileMesh.New(fname)
5462 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5463 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5464 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5465 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5467 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)
5468 f3.setName(fieldName) ; f3.checkConsistencyLight()
5469 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5471 mm=MEDFileMesh.New(fname)
5472 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5473 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5475 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5476 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])
5477 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)
5478 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)
5479 f4.checkConsistencyLight()
5480 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5482 mm=MEDFileMesh.New(fname)
5483 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5484 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5488 def testMEDFileFieldEasyField3(self):
5489 """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."""
5490 fname="Pyfile103.med"
5493 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5494 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5496 m.insertNextCell(NORM_TRI3,[0,1,2])
5497 m.insertNextCell(NORM_TRI3,[3,4,5])
5498 m.insertNextCell(NORM_TRI3,[6,7,8])
5499 m.insertNextCell(NORM_TRI3,[9,10,11])
5500 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5501 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5503 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5505 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5506 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5510 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5511 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5513 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5514 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5515 # here f1 lying on level -1 not 0 check if "field" method detect it !
5516 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5517 f1.setMesh(mm[-1]) # -1 is very important
5519 f1.checkConsistencyLight()
5521 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5523 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5524 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5526 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5527 f3.setMesh(mm[-1]) # this line is important
5528 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)
5529 f3.setName(fieldName) ; f3.checkConsistencyLight()
5530 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5532 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5533 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5535 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5536 f4.setMesh(mm[-1]) # this line is important
5537 f4.setName(fieldName)
5538 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])
5539 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)
5540 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)
5541 f4.checkConsistencyLight()
5542 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5543 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5544 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5548 def testMEDFileFieldEasyField4(self):
5549 """ Same than testMEDFileFieldEasyField3 but with integers"""
5550 fname="Pyfile104.med"
5553 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5554 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5556 m.insertNextCell(NORM_TRI3,[0,1,2])
5557 m.insertNextCell(NORM_TRI3,[3,4,5])
5558 m.insertNextCell(NORM_TRI3,[6,7,8])
5559 m.insertNextCell(NORM_TRI3,[9,10,11])
5560 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5561 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5563 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5565 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5566 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5570 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5571 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5573 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5574 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5575 # here f1 lying on level -1 not 0 check if "field" method detect it !
5576 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5577 f1.setMesh(mm[-1]) # -1 is very important
5579 f1.checkConsistencyLight()
5581 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5583 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5584 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5586 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5587 f3.setMesh(mm[-1]) # this line is important
5588 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) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5593 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5595 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5596 f4.setMesh(mm[-1]) # this line is important
5597 f4.setName(fieldName)
5598 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])
5599 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)
5600 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)
5601 f4.checkConsistencyLight()
5602 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5603 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5604 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5608 def testMEDFileFieldEasyField5(self):
5609 """More and more difficult now look at how profiles are managed by "field" method."""
5610 fname="Pyfile105.med"
5613 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5614 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5616 m.insertNextCell(NORM_TRI3,[0,1,2])
5617 m.insertNextCell(NORM_TRI3,[3,4,5])
5618 m.insertNextCell(NORM_TRI3,[6,7,8])
5619 m.insertNextCell(NORM_TRI3,[9,10,11])
5620 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5621 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5624 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5625 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5627 arr0=DataArrayDouble([10,11,12,13])
5628 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5629 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5630 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5633 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5634 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5635 # more complicated -> multi level
5636 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5638 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5639 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5641 mm2[0]=m0 ; mm2[-1]=m
5643 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5645 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5646 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5650 def testExtractPart1(self):
5651 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)])
5653 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5654 m0.insertNextCell(NORM_TRI3,[8,4,3])
5655 m0.insertNextCell(NORM_TRI3,[8,9,4])
5656 m0.insertNextCell(NORM_TRI3,[7,13,8])
5657 m0.insertNextCell(NORM_TRI3,[7,12,13])
5658 m0.insertNextCell(NORM_TRI3,[0,6,1])
5659 m0.insertNextCell(NORM_TRI3,[0,5,6])
5660 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5661 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5662 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5663 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5664 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5666 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5667 m1.insertNextCell(NORM_SEG2,[10,5])
5668 m1.insertNextCell(NORM_SEG2,[5,0])
5669 m1.insertNextCell(NORM_SEG2,[0,1])
5670 m1.insertNextCell(NORM_SEG2,[1,2])
5671 m1.insertNextCell(NORM_SEG2,[2,3])
5672 m1.insertNextCell(NORM_SEG2,[3,4])
5673 m1.insertNextCell(NORM_SEG2,[4,9])
5674 m1.insertNextCell(NORM_SEG2,[9,14])
5675 m1.insertNextCell(NORM_SEG2,[14,13])
5676 m1.insertNextCell(NORM_SEG2,[13,12])
5677 m1.insertNextCell(NORM_SEG2,[12,11])
5678 m1.insertNextCell(NORM_SEG2,[11,10])
5680 mm[0]=m0 ; mm[-1]=m1
5681 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5683 tab[0]=DataArrayInt([0,2,3,4,6,7])
5684 tab[-1]=DataArrayInt([2,3,4,5,9])
5686 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5690 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5693 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5694 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5695 f0.setMesh(m0) ; f0.setName(fname0)
5696 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5697 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5698 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]))
5699 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5700 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5701 fmts.pushBackTimeStep(f1ts)
5703 mmOut=mm.extractPart(tab)
5705 fsPart0=fs.extractPart(tab,mm)
5706 self.assertEqual(len(fsPart0),1)
5708 self.assertEqual(len(fmtsP),1)
5710 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5712 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5713 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5715 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5716 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5717 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5718 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5719 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5721 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5722 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5723 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5724 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5725 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5726 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5727 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5728 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5729 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5730 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5732 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5733 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5734 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5736 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5737 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5738 for i,tt in enumerate(tss):
5739 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5740 myarr=arr0_0+i*1000.
5742 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5743 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5745 fsPart1=fs.extractPart(tab,mm)
5746 self.assertEqual(len(fsPart1),1)
5748 self.assertEqual(len(fmtsP),len(tss))
5749 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5750 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5751 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5752 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5753 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5754 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5755 self.assertEqual(fPart.getTime(),list(tt))
5760 def testSymmetryPlusAggregationMFD1(self):
5761 """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5762 fname1="Pyfile106_1.med"
5763 fname2="Pyfile106_2.med"
5764 fname3="Pyfile106_3.med"
5767 da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5769 mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5770 mm1_0.setCoords(da1)
5771 mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5772 mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5773 mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5774 mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5775 mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5777 mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5778 mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5780 mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5781 mm1_1.setCoords(da1)
5782 mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5783 mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5784 mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5785 mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5786 mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5787 mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5789 mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5790 mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5791 for i in range(1,10):
5792 mm1.setFamilyId("F%d"%i,i)
5793 mm1.setFamilyId("FAMILLE_ZERO",0)
5794 mm1.setFamilyId("H1",100)
5795 mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5796 mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5797 mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5798 mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5801 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]"])
5803 mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5804 mm2_0.setCoords(da1)
5805 mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5806 mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5807 mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5808 mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5810 mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5811 mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5813 mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5814 mm2_1.setCoords(da1)
5815 mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5816 mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5817 mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5818 mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5819 mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5820 mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5821 mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5822 mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5824 mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5825 mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5826 for i in range(1,12):
5827 mm2.setFamilyId("G%d"%i,i+30)
5828 mm2.setFamilyId("H1",100)
5829 mm2.setFamilyId("FAMILLE_ZERO",0)
5830 mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5831 mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5832 mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5833 mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5835 mm=MEDFileUMesh.Aggregate([mm1,mm2])
5837 def CheckMesh(tester,mm):
5838 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]"])
5839 tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5840 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])))
5841 tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5842 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])))
5843 tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5844 tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5845 tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5846 tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5847 tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5848 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)]
5849 tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5850 tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5851 tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5852 tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5859 infoc=["dd [W]","eee [kA]"]
5861 fmts1=MEDFileFieldMultiTS()
5862 f1ts1=MEDFileField1TS()
5863 f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5864 arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5865 arr1.setInfoOnComponents(infoc)
5866 f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5867 f1_1.checkConsistencyLight()
5868 f1ts1.setFieldNoProfileSBT(f1_1)
5870 f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5871 arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5872 arr2.setInfoOnComponents(infoc)
5873 f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5874 f1_2.checkConsistencyLight()
5875 f1ts1.setFieldNoProfileSBT(f1_2)
5876 f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5877 arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5878 arr3.setInfoOnComponents(infoc)
5879 f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5880 f1_3.checkConsistencyLight()
5881 f1ts1.setFieldNoProfileSBT(f1_3)
5882 fmts1.pushBackTimeStep(f1ts1)
5884 f1ts2=f1ts1.deepCopy()
5885 f1ts2.setTime(t2[1],t2[2],t2[0])
5886 f1ts2.getUndergroundDataArray()[:]+=2000
5887 fmts1.pushBackTimeStep(f1ts2)
5889 fmts2=MEDFileFieldMultiTS()
5890 f1ts3=MEDFileField1TS()
5891 f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5892 arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5893 arr4.setInfoOnComponents(infoc)
5894 f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5895 f2_1.checkConsistencyLight()
5896 f1ts3.setFieldNoProfileSBT(f2_1)
5897 f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5898 arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5899 arr5.setInfoOnComponents(infoc)
5900 f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5901 f2_2.checkConsistencyLight()
5902 f1ts3.setFieldNoProfileSBT(f2_2)
5903 f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5904 arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5905 arr6.setInfoOnComponents(infoc)
5906 f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5907 f2_3.checkConsistencyLight()
5908 f1ts3.setFieldNoProfileSBT(f2_3)
5909 fmts2.pushBackTimeStep(f1ts3)
5911 f1ts4=f1ts3.deepCopy()
5912 f1ts4.setTime(t2[1],t2[2],t2[0])
5913 f1ts4.getUndergroundDataArray()[:]+=2000
5914 fmts2.pushBackTimeStep(f1ts4)
5917 mfd1.setMeshes(MEDFileMeshes())
5918 mfd1.getMeshes().pushMesh(mm1)
5919 mfd1.setFields(MEDFileFields())
5920 mfd1.getFields().pushField(fmts1)
5923 mfd2.setMeshes(MEDFileMeshes())
5924 mfd2.getMeshes().pushMesh(mm2)
5925 mfd2.setFields(MEDFileFields())
5926 mfd2.getFields().pushField(fmts2)
5928 mfd=MEDFileData.Aggregate([mfd1,mfd2])
5929 def CheckMFD(tester,mfd):
5930 tester.assertEqual(len(mfd.getMeshes()),1)
5931 tester.assertEqual(len(mfd.getFields()),1)
5932 CheckMesh(self,mfd.getMeshes()[0])
5933 tester.assertEqual(len(mfd.getFields()[0]),2)
5934 zeF1=mfd.getFields()[0][0]
5935 zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5936 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5937 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5938 ref.renumberCells(o2n)
5939 tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5940 zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5941 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5942 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5943 ref.renumberCells(o2n)
5944 tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5945 zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5946 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5947 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5948 ref.renumberCells(o2n)
5949 tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5951 zeF2=mfd.getFields()[0][1]
5952 zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5953 ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5954 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5955 ref.renumberCells(o2n)
5956 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5957 tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5958 zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5959 ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5960 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5961 ref.renumberCells(o2n)
5962 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5963 tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5964 zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5965 ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5966 o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5967 ref.renumberCells(o2n)
5968 ref.setTime(*t2) ; ref.getArray()[:]+=2000
5969 tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5971 mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5972 mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5977 def testAggregateWithGroups(self):
5978 """ Testing MEDFileUMesh::Aggretate when groups are present. """
5979 def generate(grp_name, offset):
5980 coo = DataArrayDouble([0., 1., 2.])
5982 m = MEDCouplingCMesh("toto")
5983 m.setCoords(coo, coo)
5984 m = m.buildUnstructured()
5985 mu = MEDFileUMesh.New()
5986 mu.setMeshAtLevel(0, m)
5987 g = DataArrayInt([0])
5989 g2 = DataArrayInt([1])
5990 g2.setName("common") # make a common group for all meshes being merged
5991 mu.setGroupsAtLevel(0, [g, g2])
5994 m1 = generate("A", 0.)
5995 m2 = generate("B", 2.)
5996 mm = MEDFileUMesh.Aggregate([m1,m2])
5998 self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
5999 self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6000 refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6001 self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6002 self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6003 self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6004 self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6005 self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6006 self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6011 def testExtrudedMesh1(self):
6012 fname="Pyfile107.med"
6013 arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6014 mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6015 ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6018 ex2=mm.convertToExtrudedMesh()
6019 mm2=MEDFileMesh.New(fname)
6020 ex3=mm2.convertToExtrudedMesh()
6021 self.assertTrue(ex.isEqual(ex2,1e-12))
6022 self.assertTrue(ex.isEqual(ex3,1e-12))
6025 @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6027 def testWriteInto30(self):
6028 fname="Pyfile108.med"
6029 fname2="Pyfile109.med"
6030 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6031 mm=MEDFileUMesh() ; mm[0]=m
6032 mm.setFamilyId("FAMILLE_ZERO",0)
6035 assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6036 mm2=MEDFileUMesh(fname)
6037 self.assertTrue(mm.isEqual(mm2,1e-12))
6040 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
6043 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6045 def testPickelizationOfMEDFileObjects1(self):
6046 fname="Pyfile110.med"
6047 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)
6048 m0=MEDCouplingUMesh("Mesh",2)
6050 m0.insertNextCell(NORM_TRI3,[1,4,2])
6051 m0.insertNextCell(NORM_TRI3,[4,5,2])
6052 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6053 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6054 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6055 m0.finishInsertingCells()
6057 m1=MEDCouplingUMesh(m0.getName(),1)
6059 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6061 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6063 m1.finishInsertingCells()
6067 m.setMeshAtLevel(0,m0)
6068 m.setMeshAtLevel(-1,m1)
6070 dt=3 ; it=2 ; tim=4.5
6071 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6072 fieldNode0.setName("fieldNode0")
6073 fieldNode0.setTime(tim,dt,it)
6074 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6075 arr=DataArrayDouble([10,11,12,13,14])
6076 fieldNode0.setArray(arr)
6077 f0=MEDFileField1TS()
6078 f0.setFieldProfile(fieldNode0,m,0,pfl0)
6079 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6080 fieldNode1.setName("fieldNode1")
6081 fieldNode1.setTime(tim,dt,it)
6082 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6083 arr1=DataArrayDouble([20,21,22,23,24,25,26])
6084 fieldNode1.setArray(arr1)
6085 f1=MEDFileField1TS()
6086 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6088 mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6089 mfd.getMeshes().pushMesh(m)
6090 fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6091 mfd.getFields().pushField(fmts)
6092 # first start gently
6095 self.assertEqual(len(mfd2.getMeshes()),1)
6096 self.assertEqual(len(mfd2.getFields()),1)
6097 self.assertEqual(len(mfd2.getFields()[0]),1)
6098 self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6099 ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6100 ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6101 self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6102 # OK now end of joke -> serialization of MEDFileData
6103 st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6104 mfd3=pickle.loads(st)
6106 self.assertEqual(len(mfd3.getMeshes()),1)
6107 self.assertEqual(len(mfd3.getFields()),1)
6108 self.assertEqual(len(mfd3.getFields()[0]),1)
6109 self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6110 ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6111 self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6112 # serialization of MEDFileFields
6113 st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6114 fs4=pickle.loads(st)
6115 ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6116 self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6117 # serialization of MEDFileFieldMulitTS
6118 st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6119 fmts5=pickle.loads(st)
6120 ff5=fmts5[0].field(mfd3.getMeshes()[0])
6121 self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6122 # serialization of MEDFileField1TS
6123 st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6124 f1ts6=pickle.loads(st)
6125 ff6=f1ts6.field(mfd3.getMeshes()[0])
6126 self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6127 # serialization of MEDFileMeshes
6128 st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6129 ms7=pickle.loads(st)
6130 self.assertEqual(len(ms7),1)
6131 self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6134 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6136 def testPickelizationOfMEDFileObjects2(self):
6138 self.internalMEDMesh6() # generates MEDFileMesh5.med file
6139 mm=MEDFileMesh.New("MEDFileMesh5.med")
6140 self.assertTrue(isinstance(mm,MEDFileCMesh))
6141 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6142 mm2=pickle.loads(st)
6143 self.assertTrue(isinstance(mm2,MEDFileCMesh))
6144 self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6146 self.internalCurveLinearMesh1() # generates Pyfile55.med
6147 mm=MEDFileMesh.New("Pyfile55.med")
6148 self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6149 st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6150 mm3=pickle.loads(st)
6151 self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6152 self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6153 self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6154 # MEDFileIntFieldMultiTS
6155 fs4=MEDFileFields("Pyfile63.med")
6156 ms4=MEDFileMeshes("Pyfile63.med")
6157 self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6158 st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6159 fmts5=pickle.loads(st)
6160 self.assertEqual(len(fs4[0]),len(fmts5))
6161 self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6162 self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6163 # MEDFileIntField1TS
6164 st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6165 f1ts6=pickle.loads(st)
6166 self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6167 self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6169 self.internalParameters1()# generates Pyfile56.med
6170 params=MEDFileParameters("Pyfile56.med")
6171 st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6172 params7=pickle.loads(st)
6173 self.assertEqual(len(params),len(params7))
6174 for i in range(len(params)):
6175 self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6180 def testGlobalNumOnNodes1(self):
6181 """Test global number on nodes here. Used by partitionners."""
6182 fname="Pyfile112.med"
6183 arr=DataArrayDouble(5) ; arr.iota()
6184 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6188 self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6189 d=DataArrayInt([7,8,9,2,0])
6191 mm.setGlobalNumFieldAtLevel(1,d)
6192 mm.checkConsistency()
6193 self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6194 mm.checkConsistency()
6195 self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6196 self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6198 mm2=MEDFileMesh.New(fname)
6199 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6200 self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6201 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6202 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6203 mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6204 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6208 def testPartialReadOfEntities1(self):
6209 """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6210 fname="Pyfile113.med"
6211 arr=DataArrayDouble(5) ; arr.iota()
6212 m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6219 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6220 f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6222 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6223 f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6225 f1ts=MEDFileField1TS()
6226 f1ts.setFieldNoProfileSBT(f1)
6227 f1ts.setFieldNoProfileSBT(f2)
6228 self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6229 f1ts_2=f1ts.deepCopy()
6230 f1ts_2.getUndergroundDataArray()[:]+=2
6231 f1ts_2.setTime(3,4,6.)
6232 fmts=MEDFileFieldMultiTS()
6233 fmts.pushBackTimeStep(f1ts)
6234 fmts.pushBackTimeStep(f1ts_2)
6239 ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6240 mm=MEDFileMesh.New(fname)
6241 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)
6243 self.assertEqual(len(fs),1)
6245 self.assertEqual(len(fmts),2)
6246 ff0=fmts[0] ; ff1=fmts[1]
6247 self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6248 self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6249 f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6250 self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6254 def testFloat32InMEDFileFieldStar1(self):
6255 """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6256 fname="Pyfile114.med"
6257 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6258 f1=f1.convertToFloatField()
6260 mm1=MEDFileUMesh.New()
6261 mm1.setCoords(m1.getCoords())
6262 mm1.setMeshAtLevel(0,m1)
6263 mm1.setName(m1.getName())
6265 ff1=MEDFileFloatField1TS()
6266 ff1.setFieldNoProfileSBT(f1)
6267 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6268 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6269 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6271 a,b=ff1.getUndergroundDataArrayExt()
6272 self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6273 self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6274 ff2=MEDFileAnyTypeField1TS.New(fname)
6275 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6276 self.assertEqual(ff2.getTime(),[0,1,2.0])
6277 self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6278 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6279 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6280 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6282 c=ff2.getUndergroundDataArray() ; c*=2
6283 ff2.write(fname,0) # 2 time steps in
6284 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6285 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6286 self.assertEqual(len(ffs1),2)
6287 self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6288 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6289 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6290 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6291 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6292 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6293 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6294 self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6295 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6296 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6297 bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6299 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6302 self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6303 nf1=MEDCouplingFieldFloat(ON_NODES)
6304 nf1.setTime(9.,10,-1)
6305 nf1.setMesh(f1.getMesh())
6306 narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6307 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6308 nff1=MEDFileFloatField1TS.New()
6309 nff1.setFieldNoProfileSBT(nf1)
6310 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6311 self.assertEqual(nff1.getTime(),[10,-1,9.0])
6314 nf2=MEDCouplingFieldFloat(ON_NODES)
6315 nf2.setTime(19.,20,-11)
6316 nf2.setMesh(f1.getMesh())
6317 narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
6318 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6319 nff2=MEDFileFloatField1TS.New()
6320 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6321 nff2.setFieldProfile(nf2,mm1,0,npfl)
6322 nff2.getFieldWithProfile(ON_NODES,0,mm1)
6323 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6324 self.assertTrue(b.isEqual(npfl))
6325 self.assertTrue(a.isEqual(narr2,1e-7))
6327 nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6328 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6329 self.assertTrue(b.isEqual(npfl))
6330 self.assertTrue(a.isEqual(narr2,1e-7))
6332 nf3=MEDCouplingFieldDouble(ON_NODES)
6333 nf3.setName("VectorFieldOnNodesDouble")
6334 nf3.setTime(29.,30,-21)
6335 nf3.setMesh(f1.getMesh())
6336 nf3.setArray(f1.getMesh().getCoords())
6337 nff3=MEDFileField1TS.New()
6338 nff3.setFieldNoProfileSBT(nf3)
6340 fs=MEDFileFields(fname)
6341 self.assertEqual(len(fs),4)
6342 ffs=[it for it in fs]
6343 self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6344 self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6345 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6346 self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6348 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6349 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6350 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6351 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6352 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6354 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6355 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6356 self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6357 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6358 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6359 self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6360 MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6361 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6363 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6364 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6365 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6366 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6370 def testPenta18_1(self):
6371 """EDF8478 : Test of read/write of penta18"""
6372 fname="Pyfile115.med"
6373 arr=DataArrayDouble([
6374 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6375 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6376 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6377 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6378 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6379 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6380 m=MEDCouplingUMesh("mesh",3)
6383 m.insertNextCell(NORM_PENTA18,list(range(18)))
6384 m.checkConsistencyLight()
6386 f=MEDCouplingFieldDouble(ON_NODES)
6388 f.setName("FieldOnPenta18")
6389 f.setArray(DataArrayDouble(list(range(18))))
6390 f.checkConsistencyLight()
6392 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6394 f2=MEDCouplingFieldDouble(ON_NODES)
6396 f2.setName("FieldOnPenta18Sub")
6397 f2.setArray(DataArrayDouble(list(range(18))))
6398 f2.checkConsistencyLight()
6399 WriteField(fname,f2,True)
6401 self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6402 self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6403 self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6407 def testFieldsLinearToQuadratic(self):
6408 fname="Pyfile117.med"
6409 arr=DataArrayDouble([0,1])
6410 m=MEDCouplingCMesh();
6411 m.setCoords(arr,arr,arr)
6412 m=m.buildUnstructured()
6414 m2.translate([2,0,0])
6415 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6419 mmq=mm.linearToQuadratic(0)
6420 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6421 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6423 f=MEDCouplingFieldDouble(ON_NODES)
6427 arr=DataArrayDouble(m3.getNumberOfNodes())
6430 f1ts=MEDFileField1TS()
6431 f1ts.setFieldNoProfileSBT(f)
6432 fmts=MEDFileFieldMultiTS()
6433 fmts.pushBackTimeStep(f1ts)
6434 f1ts_2=f1ts.deepCopy()
6435 f1ts_2.setTime(3,4,5.)
6436 f1ts_2.getUndergroundDataArray()[:]*=2.
6437 fmts.pushBackTimeStep(f1ts_2)
6440 fs2=fs.linearToQuadratic(mms,mmsq)
6441 self.myTester1(fs2,mmsq[0])
6442 # A small Write/Read and test again
6443 mms.write(fname,2) ; fs.write(fname,0)
6444 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6445 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6446 fs2=fs.linearToQuadratic(mms,mmqs)
6447 self.myTester1(fs2,mmqs[0])
6450 def myTester1(self,fs2,mmq):
6451 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)
6452 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])
6453 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])
6454 fToTest=fs2[0][0].field(mmq)
6455 self.assertEqual(fToTest.getTime(),[3.,1,2])
6456 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6457 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6458 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6459 self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6460 # testing 2nd timestep
6461 fToTest=fs2[0][1].field(mmq)
6462 self.assertEqual(fToTest.getTime(),[5.,3,4])
6463 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6464 self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6465 self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6466 self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6470 def testFieldsLinearToQuadratic2(self):
6471 """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6472 GeneratePyfile18(self)
6473 fname="Pyfile118.med"
6474 arr=DataArrayDouble([0,1])
6475 m=MEDCouplingCMesh();
6476 m.setCoords(arr,arr,arr)
6477 m=m.buildUnstructured()
6479 m2.translate([2,0,0])
6480 m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6482 # add a point for fun
6483 m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6487 mmq=mm.linearToQuadratic(0)
6488 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6489 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6491 f=MEDCouplingFieldDouble(ON_NODES)
6495 arr=DataArrayDouble(8) ; arr.iota()
6498 f1ts=MEDFileField1TS()
6499 pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6500 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6501 f1ts_2=f1ts.deepCopy()
6502 f1ts_2.setTime(3,4,5.)
6503 f1ts_2.getUndergroundDataArray()[:]*=4.
6504 fmts=MEDFileFieldMultiTS()
6505 fmts.pushBackTimeStep(f1ts)
6506 fmts.pushBackTimeStep(f1ts_2)
6509 fs2=fs.linearToQuadratic(mms,mmsq)
6510 mms.write(fname,2) ; fs.write(fname,0)
6512 self.myTester2(fs2,mmq)
6514 mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6515 mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6516 fs2=fs.linearToQuadratic(mms,mmqs)
6517 self.myTester2(fs2,mmq)
6518 ## More vicious add single node 16
6521 mmq=mm.linearToQuadratic(0)
6522 mms=MEDFileMeshes() ; mms.pushMesh(mm)
6523 mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6525 f=MEDCouplingFieldDouble(ON_NODES)
6529 arr=DataArrayDouble(9) ; arr.iota()
6532 f1ts=MEDFileField1TS()
6533 pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6534 f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6535 fmts=MEDFileFieldMultiTS()
6536 fmts.pushBackTimeStep(f1ts)
6539 fs2=fs.linearToQuadratic(mms,mmsq)
6541 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")
6542 f1tsToTest=fs2[0][0]
6543 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])
6544 assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6545 assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6546 assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6549 def myTester2(self,fs2,mmq):
6550 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")
6551 f1tsToTest=fs2[0][0]
6552 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])
6553 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6554 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6555 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6556 fToTest=fs2[0][0].field(mmq)
6557 self.assertEqual(fToTest.getTime(),[3.,1,2])
6558 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6559 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])))
6560 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))
6561 self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6563 f1tsToTest=fs2[0][1]
6564 self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6565 self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6566 self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6567 fToTest=fs2[0][1].field(mmq)
6568 self.assertEqual(fToTest.getTime(),[5.,3,4])
6569 mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6570 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])))
6571 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))
6572 self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6577 def testSetFieldProfileFlatly1(self):
6578 """ 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
6580 arr=DataArrayDouble(10) ; arr.iota()
6581 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6582 m=m.buildUnstructured()
6585 m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6589 f=MEDCouplingFieldDouble(ON_CELLS)
6591 arr=DataArrayDouble(m.getNumberOfCells())
6595 pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6597 refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6598 refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6600 f1ts=MEDFileField1TS()
6601 f1ts.setFieldProfile(f,mm,0,pfl)
6602 self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6603 self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6604 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6606 f1ts=MEDFileField1TS()
6607 f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6608 self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6609 self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6610 self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6611 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6612 self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6616 def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6617 """ Here multi level groups are created"""
6618 arr=DataArrayDouble(11) ; arr.iota()
6619 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6620 m=m.buildUnstructured()
6622 m1=m.buildDescendingConnectivity()[0]
6627 grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6628 grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6629 grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6630 grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6631 ################ ajouter un groupe sur plusieurs niveau
6633 mm.addGroup(-1,grp2)
6634 mm.addGroup(0,grp0_0)
6635 mm.addGroup(-1,grp0_1)
6636 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6637 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6638 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6639 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6640 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6641 self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6642 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6643 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6644 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6645 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6646 mm.removeGroupAtLevel(0,grpName)
6647 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6648 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6649 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6650 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6651 mm.removeGroupAtLevel(-1,grpName)
6652 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6653 self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6654 mm.addGroup(-1,grp0_1)
6655 mm.addGroup(0,grp0_0)
6656 self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6657 self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6658 self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6659 self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6660 self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6664 def testYutaka(self):
6665 """ 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...
6666 Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6668 m=MEDCouplingCMesh()
6669 arr=DataArrayDouble(4) ; arr.iota()
6670 m.setCoords(arr,arr,arr)
6671 m=m.buildUnstructured()
6674 m=m.buildUnstructured()
6675 m1=m.buildDescendingConnectivity()[0]
6681 grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6683 grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6685 grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6687 grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6688 mm.addGroup(-1,grp3)
6689 self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6690 grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6691 mm.addNodeGroup(grp4)
6692 mm.rearrangeFamilies()
6693 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6694 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6695 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6696 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6697 self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6699 for grp in [grp0,grp1,grp2,grp3,grp4]:
6700 self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6705 def testContxtMger1TS(self):
6706 fname="Pyfile119.med"
6707 coo=DataArrayDouble(1000) ; coo.iota()
6708 m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6710 WriteMesh(fname,m,True)
6711 f=MEDCouplingFieldDouble(ON_CELLS)
6714 arr=DataArrayDouble(m.getNumberOfCells())
6716 f.checkConsistencyLight()
6719 f.setTime(float(i),i,0)
6720 WriteFieldUsingAlreadyWrittenMesh(fname,f)
6723 mm=MEDFileMesh.New(fname)
6724 fmts=MEDFileFieldMultiTS(fname,False)
6725 refSize=fmts.getHeapMemorySize()
6731 self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6734 def testZipFamilies1(self):
6736 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6739 arr=DataArrayDouble(10) ; arr.iota()
6740 m=MEDCouplingCMesh()
6741 m.setCoords(arr,arr)
6742 m=m.buildUnstructured()
6747 for i in range(m.getNumberOfCells()):
6748 d = DataArrayInt([i])
6749 d.setName("grp%d"%i)
6753 grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6754 grp_all.setName("grp_all")
6755 mm.addGroup(0,grp_all)
6756 for i in range(m.getNumberOfCells()):
6757 mm.removeGroup("grp{}".format(i))
6760 mm.zipFamilies() # the method to test
6762 self.assertEqual(mm.getGroupsNames(),("grp_all",))
6763 self.assertEqual(len(mm.getFamiliesNames()),1)
6764 self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6767 def testZipFamilies2(self):
6769 MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6772 arr=DataArrayDouble(21) ; arr.iota()
6773 m=MEDCouplingCMesh()
6775 m=m.buildUnstructured()
6780 # 1 and 3 to be merged
6781 # 2 and 5 to be merged
6782 mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6783 for i in range(1,9):
6784 mm.setFamilyId("Fam_{}".format(i),-i)
6785 mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6786 mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6787 mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6789 grp0=DataArrayInt([0,1,3,8,10,19])
6790 grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6791 grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6792 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6793 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6794 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6795 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6797 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6798 self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6799 self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6800 self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6801 self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6804 def testMeshConvertFromMEDFileGeoType(self):
6805 self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6808 def testFieldInt64_0(self):
6810 Small basic test with I/O of field in int64.
6812 fname="Pyfile120.med"
6813 arr = DataArrayDouble([0,1])
6814 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6815 f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6816 v = 1234567890123456
6817 f.setArray(DataArrayInt64([v]))
6821 f1ts = MEDFileInt64Field1TS()
6822 f1ts.setFieldNoProfileSBT(f)
6823 fmts = MEDFileInt64FieldMultiTS()
6824 fmts.pushBackTimeStep(f1ts)
6825 fs = MEDFileFields()
6830 mm = MEDFileMesh.New(fname)
6831 fs = MEDFileFields(fname)
6832 f = fs[0][0].field(mm)
6833 self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6834 self.assertEqual( f.getArray().getIJ(0,0) , v )
6837 def testNonRegUMeshSubParts(self):
6839 Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6841 fname = "Pyfile121.med"
6842 m0 = MEDCouplingUMesh("mesh",1)
6843 coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6844 m0.setCoords(coords)
6846 m0.insertNextCell(NORM_SEG2,[1,2])
6849 m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6850 m1.setCoords(m0.getCoords())
6851 m1.setNodalConnectivity(DataArrayInt([1,2]))
6852 m1.setName(m0.getName())
6854 fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6855 mm.zipCoords() # <- This call changes the coords and connectivity
6858 mm = MEDFileMesh.New(fname)
6859 mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6860 self.assertTrue( m0.isEqual(mm[0],1e-12) )
6865 if __name__ == "__main__":