1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016 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 (CEA/DEN)
22 from MEDLoader import *
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest
28 class MEDLoaderTest3(unittest.TestCase):
29 def testMEDMesh1(self):
30 fileName="Pyfile18.med"
31 mname="ExampleOfMultiDimW"
32 medmesh=MEDFileMesh.New(fileName,mname)
33 self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
34 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
35 m1_0=medmesh.getLevel0Mesh(True)
36 m1_1=ReadUMeshFromFile(fileName,mname,0)
37 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
38 m2_0=medmesh.getLevelM1Mesh(True)
39 m2_1=ReadUMeshFromFile(fileName,mname,-1)
40 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
43 def testMEDMesh2(self):
44 fileName="Pyfile10.med"
46 outFileName="MEDFileMesh1.med"
47 medmesh=MEDFileUMesh.New(fileName,mname)
48 self.assertEqual((0,),medmesh.getNonEmptyLevels())
49 m1_0=medmesh.getLevel0Mesh(True)
50 m1_1=ReadUMeshFromFile(fileName,mname,0)
51 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
52 g1_0=medmesh.getGroup(0,"mesh2",True)
53 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
54 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
55 g1_0=medmesh.getGroup(0,"mesh3",True)
56 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
57 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
58 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
59 g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
60 g1_1.setName(g1_0.getName())
61 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
62 g1_0=medmesh.getFamily(0,"Family_-3",True)
63 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
64 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
65 g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
66 g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
67 g1_1.setName(g1_0.getName())
68 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
69 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
70 medmesh.write(outFileName,2);
71 self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
72 self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
73 self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
74 self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
75 famn=medmesh.getFamilyNameGivenId(0)
76 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
78 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
79 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
80 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
81 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
82 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
85 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
86 def testMEDMesh3(self):
87 outFileName="MEDFileMesh3.med"
88 c=DataArrayDouble.New()
89 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 ];
90 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
91 c.setValues(coords,9,2)
92 m=MEDCouplingUMesh.New();
93 m.setMeshDimension(2);
95 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
96 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
97 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
98 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
99 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
100 m.finishInsertingCells();
102 m.checkConsistencyLight()
103 m1=MEDCouplingUMesh.New();
104 m1.setMeshDimension(1);
106 m1.insertNextCell(NORM_SEG2,2,[1,4])
107 m1.insertNextCell(NORM_SEG2,2,[3,6])
108 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
109 m1.finishInsertingCells();
111 m1.checkConsistencyLight()
112 m2=MEDCouplingUMesh.New();
113 m2.setMeshDimension(0);
115 m2.insertNextCell(NORM_POINT1,1,[1])
116 m2.insertNextCell(NORM_POINT1,1,[3])
117 m2.insertNextCell(NORM_POINT1,1,[2])
118 m2.insertNextCell(NORM_POINT1,1,[6])
119 m2.finishInsertingCells();
121 m2.checkConsistencyLight()
123 mm=MEDFileUMesh.New()
124 self.assertTrue(mm.getUnivNameWrStatus())
125 mm.setName("MyFirstMEDCouplingMEDmesh")
126 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
128 mm.setMeshAtLevel(-1,m1);
129 mm.setMeshAtLevel(0,m);
130 mm.setMeshAtLevel(-2,m2);
131 # playing with groups
132 g1_2=DataArrayInt.New()
133 g1_2.setValues([1,3],2,1)
135 g2_2=DataArrayInt.New()
136 g2_2.setValues([1,2,3],3,1)
138 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
139 g1_1=DataArrayInt.New()
140 g1_1.setValues([0,1,2],3,1)
142 g2_1=DataArrayInt.New()
143 g2_1.setValues([0,2],2,1)
145 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
146 g1_N=DataArrayInt.New()
147 g1_N.setValues(range(8),8,1)
149 g2_N=DataArrayInt.New()
150 g2_N.setValues(range(9),9,1)
152 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
153 mm.createGroupOnAll(0,"GrpOnAllCell")
154 # check content of mm
155 t=mm.getGroupArr(0,"G1",False)
156 self.assertTrue(g1_2.isEqual(t));
157 t=mm.getGroupArr(0,"G2",False)
158 self.assertTrue(g2_2.isEqual(t));
159 t=mm.getGroupArr(-1,"G1",False)
160 self.assertTrue(g1_1.isEqual(t));
161 t=mm.getGroupArr(-1,"G2",False)
162 self.assertTrue(g2_1.isEqual(t));
163 t=mm.getGroupArr(1,"G1",False)
164 self.assertTrue(g1_N.isEqual(t));
165 t=mm.getGroupArr(1,"G2",False)
166 self.assertTrue(g2_N.isEqual(t));
167 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
168 t=mm.getGroupArr(0,"GrpOnAllCell")
169 self.assertTrue(t.getValues()==range(5))
172 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
173 mmCpy.write(outFileName,2);
175 mm=MEDFileMesh.New(outFileName)
177 self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
178 self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
179 self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
180 mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
181 self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
182 self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
183 self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
184 lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
185 self.assertEqual(3,len(lmm))
186 self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
187 self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
188 self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
190 self.assertTrue(mm.getUnivNameWrStatus())
191 self.assertTrue(isinstance(mm.getUnivName(),str))
192 self.assertTrue(len(mm.getUnivName())!=0)
193 mbis=mm.getMeshAtLevel(0)
194 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
195 self.assertTrue(m.isEqual(mbis,1e-12));
197 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
200 # this test is the testMEDMesh3 except that permutation is dealed here
201 def testMEDMesh4(self):
202 outFileName="MEDFileMesh4.med"
203 c=DataArrayDouble.New()
204 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 ];
205 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
206 c.setValues(coords,9,2)
207 c.setInfoOnComponent(0,"abcdef [km]")
208 c.setInfoOnComponent(1,"ghij [MW]")
209 m=MEDCouplingUMesh.New();
210 m.setMeshDimension(2);
212 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
213 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
214 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
215 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
216 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
217 m.finishInsertingCells();
219 m.checkConsistencyLight()
220 m1=MEDCouplingUMesh.New();
221 m1.setMeshDimension(1);
223 m1.insertNextCell(NORM_SEG2,2,[1,4])
224 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
225 m1.insertNextCell(NORM_SEG2,2,[3,6])
226 m1.finishInsertingCells();
228 m1.checkConsistencyLight()
229 m2=MEDCouplingUMesh.New();
230 m2.setMeshDimension(0);
232 m2.insertNextCell(NORM_POINT1,1,[1])
233 m2.insertNextCell(NORM_POINT1,1,[3])
234 m2.insertNextCell(NORM_POINT1,1,[2])
235 m2.insertNextCell(NORM_POINT1,1,[6])
236 m2.finishInsertingCells();
238 m2.checkConsistencyLight()
240 mm=MEDFileUMesh.New()
241 mm.setName("My2ndMEDCouplingMEDmesh")
242 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
244 renumNode=DataArrayInt.New()
245 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
246 mm.setRenumFieldArr(1,renumNode)
247 mm.setMeshAtLevel(-1,m1,True);
248 mm.setMeshAtLevel(0,m,True);
249 mm.setMeshAtLevel(-2,m2,True);
250 mm.removeMeshAtLevel(-2)
251 mm.setMeshAtLevel(-2,m2,True);
252 # playing with groups
253 g1_2=DataArrayInt.New()
254 g1_2.setValues([2,3],2,1)
256 g2_2=DataArrayInt.New()
257 g2_2.setValues([2,0,3],3,1)
259 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
260 g1_1=DataArrayInt.New()
261 g1_1.setValues([0,2,1],3,1)
263 g2_1=DataArrayInt.New()
264 g2_1.setValues([0,2],2,1)
266 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
267 g1_N=DataArrayInt.New()
268 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
270 g2_N=DataArrayInt.New()
271 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
273 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
274 # check content of mm
275 t=mm.getGroupArr(0,"G1",True)
276 self.assertTrue(g1_2.isEqual(t));
277 t=mm.getGroupArr(0,"G2",True)
278 self.assertTrue(g2_2.isEqual(t));
279 t=mm.getGroupArr(-1,"G1",True)
280 self.assertTrue(g1_1.isEqual(t));
281 t=mm.getGroupArr(-1,"G2",True)
282 self.assertTrue(g2_1.isEqual(t));
283 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
285 mm.write(outFileName,2);
286 mm2=MEDFileMesh.New(outFileName)
287 res=mm.isEqual(mm2,1e-12)
288 self.assertTrue(res[0])
289 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
290 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
291 mm2.keepFamIdsOnlyOnLevs([3],[-1])
292 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
293 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
295 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
296 self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
298 self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
299 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
300 self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
301 self.assertTrue(not mm2.existsFamily("Family_-8"))
302 mm2.createGroupOnAll(-1,"GrpOnAllFace")
303 self.assertTrue(mm2.existsFamily("Family_-8"))
304 self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
307 #testing persistence of retrieved arrays
308 def testMEDMesh5(self):
309 fileName="Pyfile18.med"
310 mname="ExampleOfMultiDimW"
311 medmesh=MEDFileUMesh.New(fileName,mname)
312 m1_0=medmesh.getLevel0Mesh(True)
313 da1=medmesh.getFamilyFieldAtLevel(0)
315 self.assertEqual(20,m1_0.getNumberOfCells())
316 self.assertEqual(20,da1.getNumberOfTuples())
319 def testMEDMesh6(self):
320 outFileName="MEDFileMesh5.med"
323 m1=MEDCouplingCMesh.New();
324 da=DataArrayDouble.New()
325 da.setValues([0.,1.,2.],3,1)
326 da.setInfoOnComponent(0,"XX [mm]")
328 da=DataArrayDouble.New()
329 da.setValues([0.,1.2],2,1)
330 da.setInfoOnComponent(0,"YY [km]")
332 da=DataArrayDouble.New()
333 da.setValues([0.,1.3],2,1)
334 da.setInfoOnComponent(0,"ZZ [um]")
337 self.assertTrue(m[0].isEqual(m1,1e-12))
338 self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
339 m.setName("myFirstCartMesh")
340 m.setDescription("mmmmpppppppp")
343 da=DataArrayInt.New()
344 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
345 m.setFamilyFieldArr(1,da)
346 m.setFamilyId("family1",1)
347 da=m.getFamilyArr(1,"family1")
349 self.assertEqual(expected1,da.getValues())
350 self.assertTrue(m.getUnivNameWrStatus())
351 m.write(outFileName,2);
352 mm=MEDFileMesh.New(outFileName)
353 self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
354 self.assertTrue(isinstance(mm,MEDFileCMesh))
355 self.assertTrue(isinstance(mm.getUnivName(),str))
356 self.assertTrue(len(mm.getUnivName())!=0)
357 self.assertTrue(m.isEqual(mm,1e-12)[0])
358 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
361 m1.setTime(tt[2],tt[0],tt[1])
362 m1.setName(m.getName())
363 m1.setTimeUnit(m.getTimeUnit())
364 m1.setDescription(m.getDescription())
365 self.assertTrue(m2.isEqual(m1,1e-12));
368 def testMEDMesh7(self):
369 fileName="Pyfile24.med"
370 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
372 m.setCoords(m2.getCoords())
373 m.setMeshAtLevel(0,m2)
374 m.setMeshAtLevel(-1,m1)
375 m.setMeshAtLevel(-2,m0)
376 m.setFamilyFieldArr(0,f2)
377 m.setFamilyFieldArr(-1,f1)
378 m.setFamilyFieldArr(-2,f0)
379 m.setFamilyFieldArr(1,p)
380 m.setRenumFieldArr(0,n2)
381 m.setRenumFieldArr(-1,n1)
382 m.setRenumFieldArr(-2,n0)
384 for i in xrange(nbOfFams):
385 m.addFamily(fns[i],fids[i])
388 for i in xrange(nbOfGrps):
389 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
391 m.setName(m2.getName())
392 m.setDescription(m2.getDescription())
394 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
395 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
396 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
397 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
398 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
399 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
400 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
401 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
402 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
405 self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
408 def funcToTestDelItem(self,ff):
412 #emulation of pointe.med file.
413 def testMEDField1(self):
414 mm=MEDFileMesh.New("Pyfile17.med")
415 mm.write("Pyfile17_bis.med",2)
416 ff=MEDFileFieldMultiTS("Pyfile17.med")
417 tsExpected=[[1,2],[3,4],[5,6]]
418 self.assertEqual(3,len(ff))
419 for pos,f1ts in enumerate(ff):
420 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
421 self.assertEqual(type(f1ts),MEDFileField1TS)
423 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
424 self.assertEqual([3,4],ff[1].getTime()[:-1])
425 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
426 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
427 ff.write("Pyfile17_bis.med",0)
429 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
430 self.assertEqual([(1,2),(3,4),(5,6)],ts)
431 self.funcToTestDelItem(ff)
432 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
433 self.assertEqual([(1,2)],ts)
437 def testMEDField2(self):
438 mm=MEDFileMesh.New("Pyfile19.med")
439 mm.write("Pyfile19_bis.med",2)
440 ff=MEDFileFieldMultiTS.New("Pyfile19.med")
441 ff.write("Pyfile19_bis.med",0)
442 self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
446 def testMEDField3(self):
447 mm=MEDFileMesh.New("Pyfile13.med")
448 mm.write("Pyfile13_bis.med",2)
449 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
450 ff.write("Pyfile13_bis.med",0)
451 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
452 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
453 f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
454 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
455 ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
456 f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
457 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
458 ff4=MEDFileField1TS.New("Pyfile13.med")
459 f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
460 self.assertTrue(f.isEqual(f4,1e-12,1e-12))
464 def testMEDField4(self):
465 mm=MEDFileMesh.New("Pyfile14.med")
466 mm.write("Pyfile14_bis.med",2)
467 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
468 ff.write("Pyfile14_bis.med",0)
469 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
470 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
471 f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
472 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
475 # MEDField get/set on pointe.med
476 def testMEDField5(self):
477 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
478 f=ff.getFieldAtLevel(ON_CELLS,0)
479 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
480 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
481 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
482 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
483 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
484 # no with renumbering
485 f=ff.getFieldAtLevel(ON_CELLS,0,1)
486 f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
487 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
488 f=ff.getFieldAtLevel(ON_CELLS,0,3)
489 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
490 f=ff.getFieldAtLevel(ON_CELLS,0,2)
491 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
492 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
493 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
496 # MEDField get/set on profiles nodes
497 def testMEDField6(self):
498 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
499 its=ff.getIterations()
500 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
501 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
502 f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
503 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
504 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
505 its=ff.getIterations()
506 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
507 f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
508 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
509 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
510 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
513 # MEDField get/set on profiles cells
514 def testMEDField7(self):
515 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
516 its=ff.getIterations()
517 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
518 f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
519 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
522 #first test of assignation. No profile and types sorted by type.
523 def testMEDField8(self):
525 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
527 mm1=MEDFileUMesh.New()
528 mm1.setCoords(m1.getCoords())
529 mm1.setMeshAtLevel(0,m1)
530 mm1.setName(m1.getName())
532 ff1=MEDFileField1TS.New()
533 ff1.setFieldNoProfileSBT(f1)
535 f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
536 itt,orr,ti=ff1.getTime()
537 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
538 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
540 itt,orr,ti=ff1.getTime()
541 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
542 da,infos=ff1.getUndergroundDataArrayExt()
543 f2.getArray().setName(da.getName())#da has the same name than f2
544 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
545 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
548 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
550 mm1=MEDFileUMesh.New()
551 mm1.setCoords(m1.getCoords())
552 mm1.setMeshAtLevel(0,m1)
553 mm1.setName(m1.getName())
555 ff1=MEDFileField1TS.New()
556 ff1.setFieldNoProfileSBT(f1)
558 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
560 f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
561 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
562 f1.getArray().setIJ(0,0,nv)
563 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
566 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
568 mm1=MEDFileUMesh.New()
569 mm1.setCoords(m1.getCoords())
570 mm1.setMeshAtLevel(0,m1)
571 mm1.setName(m1.getName())
573 ff1=MEDFileField1TS.New()
574 ff1.setFieldNoProfileSBT(f1)
576 f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
577 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
578 da,infos=ff1.getUndergroundDataArrayExt()
579 f2.getArray().setName(da.getName())#da has the same name than f2
580 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
581 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
584 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
585 f1InvalidCpy=f1.deepCopy()
586 f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
587 f1InvalidCpy2=f1.deepCopy()
588 f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
590 mm1=MEDFileUMesh.New()
591 mm1.setCoords(m1.getCoords())
592 mm1.setMeshAtLevel(0,m1)
593 mm1.setName(m1.getName())
595 ff1=MEDFileField1TS.New()
596 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
597 f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
598 self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
599 ff1.setFieldNoProfileSBT(f1)
601 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
602 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
603 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
604 sbt=ff2.getFieldSplitedByType2()
605 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
606 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
607 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
608 self.assertEqual(6,loc1.getNumberOfPointsInCells())
609 self.assertEqual(3,loc1.getNumberOfGaussPoints())
610 self.assertEqual(2,loc1.getDimension())
611 da,infos=ff2.getUndergroundDataArrayExt()
612 f2.getArray().setName(da.getName())#da has the same name than f2
613 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
614 self.assertEqual(53,da.getNumberOfTuples())
615 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)
619 def testMEDFileData1(self):
623 m1=MEDLoaderDataForTest.build1DMesh_1()
624 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
625 mmm1=MEDFileMeshMultiTS.New() ;
626 mmm1.setOneTimeStep(mm1)
627 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
628 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
629 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
630 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
632 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
633 self.assertEqual(name,mmm.getName())
634 self.assertEqual(type(mmm),MEDFileUMesh)
636 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
638 ff1=MEDFileFieldMultiTS.New()
639 ff21=MEDFileFieldMultiTS.New()
640 ff22=MEDFileFieldMultiTS.New()
641 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
642 f1.getArray().setInfoOnComponent(0,"power [kW]")
643 ff1.appendFieldNoProfileSBT(f1)
644 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
645 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
646 ff21.appendFieldNoProfileSBT(f21)
647 f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
648 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
649 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
650 ff22.appendFieldNoProfileSBT(f22)
651 fs=MEDFileFields.New()
652 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
653 for name,fmts in zip(["f1","f21","f22"],fs):
654 self.assertEqual(name,fmts.getName())
658 fname2="Pyfile29_2.med"
661 d2=MEDFileData.New(fname2)
662 self.assertEqual(2,d2.getNumberOfMeshes())
663 self.assertEqual(3,d2.getNumberOfFields())
664 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
665 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
666 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
667 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
668 self.assertTrue(m1.isEqual(m1bis,1e-12))
669 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
670 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
671 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
672 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
673 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
676 def testMEDField9(self):
677 # first test field profile WR. Full type but with some type missing
679 m1=MEDLoaderDataForTest.build2DMesh_3()
680 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
682 ff1=MEDFileField1TS.New()
683 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
684 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
685 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.
686 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
688 ff1.setFieldProfile(f1,mm1,0,da)
689 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
693 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
694 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
695 self.assertTrue(vals.isEqual(d,1e-14))
697 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
698 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
699 ff2.deepCpyGlobs(ff3)
700 sbt=ff2.getFieldSplitedByType2()
701 self.assertEqual(3,sbt[0][0])#TRI3
702 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
703 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
704 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
705 self.assertEqual(4,sbt[1][0])#QUAD4
706 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
707 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
708 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
709 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
710 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
711 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
712 self.assertTrue(vals.isEqual(d,1e-14))
715 def testMEDField10(self):
717 m1=MEDLoaderDataForTest.build2DMesh_1()
718 m1.renumberCells([0,1,4,2,3,5],False)
719 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
721 ff1=MEDFileFieldMultiTS.New()
722 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
723 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
724 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.
725 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
727 ff1.appendFieldProfile(f1,mm1,0,da)
728 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
729 ff1.appendFieldProfile(f1,mm1,0,da)
733 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
734 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
735 self.assertTrue(vals.isEqual(e,1e-14))
736 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
737 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
738 self.assertTrue(vals.isEqual(d,1e-14))
740 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
741 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
742 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
743 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
744 self.assertTrue(vals.isEqual(e,1e-14))
745 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
746 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
747 self.assertTrue(vals.isEqual(d,1e-14))
750 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
751 def testMEDField11(self):
753 m1=MEDLoaderDataForTest.build2DMesh_1()
754 m1.renumberCells([0,1,4,2,3,5],False)
755 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
757 ff1=MEDFileField1TS.New()
758 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
759 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
760 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.
761 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
763 ff1.setFieldProfile(f1,mm1,0,da)
764 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
767 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
768 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
769 self.assertTrue(vals.isEqual(d,1e-14))
771 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
773 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
774 self.assertTrue(vals.isEqual(d,1e-14))
777 def testMEDField12(self):
779 m1=MEDLoaderDataForTest.build2DMesh_1()
780 m1.renumberCells([0,1,4,2,3,5],False)
781 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
783 ff1=MEDFileFieldMultiTS.New()
784 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
785 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
786 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.
787 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
789 ff1.appendFieldProfile(f1,mm1,0,da)
790 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
791 ff1.appendFieldProfile(f1,mm1,0,da)
794 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
795 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
796 self.assertTrue(vals.isEqual(e,1e-14))
797 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
798 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
799 self.assertTrue(vals.isEqual(d,1e-14))
801 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
802 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
803 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
804 self.assertTrue(vals.isEqual(e,1e-14))
805 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
806 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
807 self.assertTrue(vals.isEqual(d,1e-14))
810 def testMEDField13(self):
812 m1=MEDLoaderDataForTest.build2DMesh_1()
813 m1.renumberCells([0,1,4,2,3,5],False)
815 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
816 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
818 ff1=MEDFileField1TS.New()
819 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
820 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
821 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.
822 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
824 ff1.setFieldProfile(f1,mm1,0,da)
827 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
828 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
829 self.assertTrue(vals.isEqual(d,1e-14))
831 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
832 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
833 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
834 self.assertTrue(vals.isEqual(d,1e-14))
837 def testMEDField14(self):
839 m1=MEDLoaderDataForTest.build2DMesh_1()
840 m1.renumberCells([0,1,4,2,3,5],False)
842 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
843 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
845 ff1=MEDFileFieldMultiTS.New()
846 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
847 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
848 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.
849 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
851 ff1.appendFieldProfile(f1,mm1,0,da)
852 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
853 ff1.appendFieldProfile(f1,mm1,0,da)
856 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
857 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
858 self.assertTrue(vals.isEqual(d,1e-14))
859 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
860 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
861 self.assertTrue(vals.isEqual(e,1e-14))
862 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
864 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
865 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
866 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
867 self.assertTrue(vals.isEqual(d,1e-14))
868 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
869 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
870 self.assertTrue(vals.isEqual(e,1e-14))
872 # 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.
873 # 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
874 # for the necessity of the test ! The idea is too create artificially a mesh having one more fictious cell per type and to roll back right after !
875 def testMEDField15(self):
877 m0=MEDLoaderDataForTest.build2DMesh_1()
878 m0.renumberCells([0,1,4,2,3,5],False)
880 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
881 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
882 ff1=MEDFileField1TS.New()
883 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
884 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
885 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.
886 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
888 ff1.setFieldProfile(f1,mm1,0,da)
889 m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
892 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
893 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
894 self.assertTrue(p1.isIota(5))
895 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
897 # Test for getFieldAtTopLevel method
898 def testMEDField16(self):
900 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
902 mm1=MEDFileUMesh.New()
903 mm1.setCoords(m1.getCoords())
904 mm1.setMeshAtLevel(0,m1)
905 mm1.setName(m1.getName())
906 ff1=MEDFileField1TS.New()
907 ff1.setFieldNoProfileSBT(f1)
908 m2=m1.buildDescendingConnectivity()[0]
909 m2.sortCellsInMEDFileFrmt()
910 m2.setName(m1.getName())
911 mm1.setMeshAtLevel(-1,m2)
913 f2=m2.getMeasureField(True)
914 dd=DataArrayDouble.New()
915 dd.alloc(f2.getArray().getNumberOfTuples(),3)
916 dd[:,0]=f2.getArray()
917 dd[:,1]=2*f2.getArray()
918 dd[:,2]=3*f2.getArray()
919 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
921 f2.copyTinyStringsFrom(f1)
922 f2.copyTinyAttrFrom(f1)
923 ff1.setFieldNoProfileSBT(f2)
925 # Reading Pyfile37.med
926 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
927 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
928 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
929 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
930 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
931 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
932 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
936 ff1=MEDFileField1TS.New()
937 ff1.setFieldNoProfileSBT(f2)
939 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
940 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
941 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
944 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
945 def testMEDField17(self):
947 m1=MEDLoaderDataForTest.build2DMesh_1()
948 m1.renumberCells([0,1,4,2,3,5],False)
949 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
951 ffs=MEDFileFields.New()
952 ff1=MEDFileFieldMultiTS.New()
953 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
954 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
955 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.
956 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
958 ff1.appendFieldProfile(f1,mm1,0,da)
959 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
960 ff1.appendFieldProfile(f1,mm1,0,da)
962 ffs.setFieldAtPos(0,ff1)
966 ffsr=MEDFileFields.New(fname)
967 ff3=ffsr.getFieldAtPos(0)
968 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
969 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
972 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
973 def testMEDField18(self):
975 m1=MEDLoaderDataForTest.build2DMesh_1()
976 m1.renumberCells([0,1,4,2,3,5],False)
977 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
979 ffs=MEDFileFields.New()
980 ff1=MEDFileFieldMultiTS.New()
981 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
982 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
983 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.
984 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
986 ff1.appendFieldProfile(f1,mm1,0,da)
987 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
988 ff1.appendFieldProfile(f1,mm1,0,da)
992 ffsr=MEDFileFields.New(fname)
993 ff3=ffsr.getFieldAtPos(0)
994 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
995 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
998 def testMEDFieldBug1(self):
1000 d=MEDFileData.New(fname)
1001 self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1004 def testMEDMesh8(self):
1005 m=MEDLoaderDataForTest.build1DMesh_1()
1006 m.convertQuadraticCellsToLinear()
1007 mm=MEDFileUMesh.New()
1008 mm.setMeshAtLevel(0,m)
1009 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1010 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1011 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1012 mm.setGroupsAtLevel(0,[g1,g2],False)
1013 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1014 self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1015 self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1016 self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1017 mm.assignFamilyNameWithGroupName()
1018 self.assertEqual(('g1','g2'),mm.getGroupsNames())
1019 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1020 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1021 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1023 mm=MEDFileUMesh.New()
1024 mm.setMeshAtLevel(0,m)
1025 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1026 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1027 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1028 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1029 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1030 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1031 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1032 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1033 self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1034 self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1035 self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1036 self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1037 mm.changeFamilyId(5,6)
1038 g=mm.getGroupArr(0,"g3")
1039 self.assertTrue(g.isEqual(g3));
1040 g=mm.getGroupArr(0,"g2")
1041 self.assertTrue(g.isEqual(g2));
1042 g=mm.getGroupArr(0,"g1")
1043 self.assertTrue(g.isEqual(g1));
1046 # bug detected by gauthier
1047 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1048 fname="Pyfile41.med"
1049 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1051 mm1=MEDFileUMesh.New()
1052 mm1.setCoords(m1.getCoords())
1053 mm1.setMeshAtLevel(0,m1)
1055 ff1=MEDFileField1TS.New()
1056 ff1.setFieldNoProfileSBT(f1)
1058 # writing mesh1 and field1, now creation of mesh2 and field2
1061 m2.translate([0.5,0.6,0.7])
1062 m2.setName("3DSurfMesh_2")
1063 f2.getArray()[:]*=2.
1064 f2.setName("VectorFieldOnCells2")
1065 mm2=MEDFileUMesh.New()
1066 mm2.setCoords(m2.getCoords())
1067 mm2.setMeshAtLevel(0,m2)
1069 ff2=MEDFileField1TS.New()
1070 ff2.setFieldNoProfileSBT(f2)
1073 f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1074 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1075 f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1076 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1079 def testMEDLoaderMultiLevelCellField1(self):
1080 fname="Pyfile42.med"
1081 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1082 m=MEDFileUMesh.New()
1083 m.setCoords(m2.getCoords())
1084 m.setMeshAtLevel(0,m2)
1085 m.setMeshAtLevel(-1,m1)
1086 m.setMeshAtLevel(-2,m0)
1090 compNames1=["comp1","comp2","comp3"]
1091 ff1=MEDFileField1TS.New()
1092 da2=DataArrayDouble.New()
1093 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1095 da2.rearrange(len(compNames1))
1096 da2.setInfoOnComponents(compNames1)
1097 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1098 ff1.setFieldNoProfileSBT(f2)
1099 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1100 da0=DataArrayDouble.New()
1101 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1103 da0.rearrange(len(compNames1))
1104 da0.setInfoOnComponents(compNames1)
1105 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1106 ff1.setFieldNoProfileSBT(f0)
1107 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1108 da1=DataArrayDouble.New()
1109 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1111 da1.rearrange(len(compNames1))
1112 da1.setInfoOnComponents(compNames1)
1113 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1114 ff1.setFieldNoProfileSBT(f1)
1115 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1120 compNames2=["comp11","comp22"]
1121 ff2=MEDFileField1TS.New()
1122 da0=DataArrayDouble.New()
1123 da0.alloc(m0.getNumberOfCells()*2,1)
1126 da0.setInfoOnComponents(compNames2)
1127 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1128 ff2.setFieldNoProfileSBT(f0)
1129 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1130 da1=DataArrayDouble.New()
1131 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1133 da1.rearrange(len(compNames2))
1134 da1.setInfoOnComponents(compNames2)
1135 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1136 ff2.setFieldNoProfileSBT(f1)
1137 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1141 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1142 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1143 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1144 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1145 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1146 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1149 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1150 fname="Pyfile43.med"
1151 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1152 m=MEDFileUMesh.New()
1153 m.setMeshAtLevel(0,m2)
1154 m.setMeshAtLevel(-1,m1)
1155 m.setMeshAtLevel(-2,m0)
1156 f=MEDFileField1TS.New()
1157 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1158 ff.setName("NodeFieldPfl")
1159 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1161 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1162 f.setFieldProfile(ff,m,-2,pfl)
1163 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1164 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1165 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1166 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1167 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1168 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1169 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1170 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1171 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1172 expected1=[1.,10.,100.,2.,20.,200.]
1173 nodeCoordsWithValue1=[10.,2.5,0.]
1174 nodeCoordsWithValue2=[10.,3.75,0.]
1176 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1177 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1180 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1184 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1185 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1186 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1187 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1188 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1189 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1190 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1191 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1192 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1194 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1199 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1200 f=MEDFileField1TS.New()
1201 f.setFieldProfile(ff,m,-2,pfl)
1202 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1203 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1204 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1205 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1206 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1207 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1208 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1209 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1210 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1211 expected2=[2.,20.,200.,1.,10.,100.]
1213 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1214 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1217 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1220 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1221 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1222 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1223 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1224 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1225 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1226 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1227 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1228 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1230 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1234 def testBuildInnerBoundaryAlongM1Group1(self):
1235 fname="Pyfile44.med"
1236 m=MEDCouplingCMesh.New()
1237 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1238 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1239 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1240 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1241 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1242 m2.setName(m.getName())
1243 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1244 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1245 mm=MEDFileUMesh.New()
1246 mm.setMeshAtLevel(0,m)
1247 mm.setMeshAtLevel(-1,m2)
1248 mm.setGroupsAtLevel(-1,[grp,grp2])
1249 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1250 mm.setGroupsAtLevel(1,[grpNode])
1251 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1252 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1253 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1255 self.assertEqual(30,mm.getNumberOfNodes())
1256 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1257 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1259 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1260 self.assertEqual([15,16,17],nodes.getValues());
1261 self.assertEqual([7,8,9],cells.getValues());
1262 self.assertEqual([12,13,14],cells2.getValues());
1263 self.assertEqual(33,mm.getNumberOfNodes())
1264 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1265 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1266 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1267 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1268 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
1269 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1270 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
1271 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1272 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])
1273 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1274 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1276 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1277 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1278 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1279 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1280 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1284 def testBuildInnerBoundaryAlongM1Group2(self):
1285 fname="Pyfile45.med"
1286 m=MEDCouplingCMesh.New()
1287 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1288 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1289 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1290 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1291 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1292 m2.setName(m.getName())
1293 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1294 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1295 mm=MEDFileUMesh.New()
1296 mm.setMeshAtLevel(0,m)
1297 mm.setMeshAtLevel(-1,m2)
1298 mm.setGroupsAtLevel(-1,[grp,grp2])
1299 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1300 mm.setGroupsAtLevel(1,[grpNode])
1301 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1302 ref1=[4,9,8,14,15,4,10,9,15,16]
1303 ref2=[4,9,8,14,30,4,10,9,30,16]
1305 self.assertEqual(30,mm.getNumberOfNodes())
1306 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1307 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1309 nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1310 self.assertEqual([15],nodes.getValues());
1311 self.assertEqual([7,8],cells.getValues());
1312 self.assertEqual([12,13],cells2.getValues());
1313 self.assertEqual(31,mm.getNumberOfNodes())
1314 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1315 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1316 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1317 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1318 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
1319 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1320 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
1321 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1322 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])
1323 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1324 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1326 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1327 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1328 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1329 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1330 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1334 def testBuildInnerBoundaryAlongM1Group3(self):
1335 """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1336 fname = "Pyfile73.med"
1337 m = MEDCouplingCMesh.New()
1338 m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1339 m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1340 m = m.buildUnstructured(); m.setName("simple")
1341 m2 = m.buildDescendingConnectivity()[0]
1342 m2.setName(m.getName())
1344 # A crack in two non connected parts of the mesh:
1345 grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1347 mm = MEDFileUMesh.New()
1348 mm.setMeshAtLevel(0,m)
1349 mm.setMeshAtLevel(-1,m2)
1350 mm.setGroupsAtLevel(-1,[grpSeg])
1351 nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1352 self.assertEqual([1,13],nodes.getValues());
1353 self.assertEqual([0,6],cellsMod.getValues());
1354 self.assertEqual([1,7],cellsNotMod.getValues());
1355 self.assertEqual(17,mm.getNumberOfNodes())
1356 self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1357 self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1358 ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1359 ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1360 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1361 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1362 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
1363 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1365 refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1366 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1367 self.assertTrue(delta.getMaxValue()[0]<1e-10)
1369 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1370 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1371 refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1372 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1373 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1376 def testBuildInnerBoundaryAlongM1Group4(self):
1377 """ Test case where cells touch the M1 group on some nodes only and not on full egdes (triangle mesh for ex)
1379 coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1380 0.,1., 1.,1., 2.,1., 3.,1.,
1381 0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1382 conn = [3,0,4,1, 3,1,4,5,
1389 connI = DataArrayInt()
1390 connI.alloc(13, 1); connI.iota(); connI *= 4
1391 m2 = MEDCouplingUMesh("2D", 2)
1393 m2.setConnectivity(DataArrayInt(conn), connI)
1394 m2.checkConsistency()
1395 m1, _, _, _, _ = m2.buildDescendingConnectivity()
1396 grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1397 grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1398 mfu = MEDFileUMesh()
1399 mfu.setMeshAtLevel(0, m2)
1400 mfu.setMeshAtLevel(-1, m1)
1401 mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1402 nNod = m2.getNumberOfNodes()
1403 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1404 m2_bis = mfu.getMeshAtLevel(0)
1405 m2_bis.checkConsistency()
1406 m1_bis = mfu.getMeshAtLevel(-1)
1407 m1_bis.checkConsistency()
1408 self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1409 self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1410 self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1411 self.assertEqual([6,7], nodesDup.getValues())
1412 self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1413 self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1414 self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1415 self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1416 self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1417 self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1418 # mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1419 ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1420 ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1421 self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1422 self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1423 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
1424 mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1425 m_bis0 = mfu.getMeshAtLevel(-1)
1426 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1427 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1429 def testBuildInnerBoundary5(self):
1430 """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1431 of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1432 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,
1433 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,
1434 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,
1435 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,
1436 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,
1437 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,
1438 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1439 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1440 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1441 97.16750463405486, 97.18018457127863], 46, 3)
1442 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,
1443 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,
1444 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,
1445 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,
1446 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,
1447 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,
1448 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,
1449 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,
1450 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,
1451 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,
1453 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,
1454 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,
1455 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1456 m3 = MEDCouplingUMesh("3D", 3)
1458 m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1459 m3.checkConsistency()
1460 m2, _, _, _, _ = m3.buildDescendingConnectivity()
1461 grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1462 mfu = MEDFileUMesh()
1463 mfu.setMeshAtLevel(0, m3)
1464 mfu.setMeshAtLevel(-1, m2)
1465 grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1466 mfu.setGroupsAtLevel(0, [grpIds3D]) # just to check preservation of 3D group
1467 mfu.setGroupsAtLevel(-1, [grpIds])
1468 nNod = m3.getNumberOfNodes()
1469 nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1470 m3_bis = mfu.getMeshAtLevel(0)
1471 m3_bis.checkConsistency()
1472 m2_bis = mfu.getMeshAtLevel(-1)
1473 m2_bis.checkConsistency()
1474 self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1475 self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1476 self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1477 self.assertEqual([3], nodesDup.getValues())
1478 self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1479 self.assertEqual(set([22]), set(cells1.getValues()))
1480 self.assertEqual(set([77]), set(cells2.getValues()))
1481 self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1482 self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1483 self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated
1484 m_bis0 = mfu.getMeshAtLevel(-1)
1485 m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1486 m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1489 def testBasicConstructors(self):
1490 fname="Pyfile18.med"
1491 m=MEDFileMesh.New(fname)
1492 m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1493 m=MEDFileMesh.New(fname)
1494 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1495 m=MEDFileUMesh(fname)
1498 m=MEDFileCMesh("MEDFileMesh5.med")
1499 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1501 m=MEDFileMeshMultiTS()
1502 m=MEDFileMeshMultiTS(fname)
1503 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1505 m=MEDFileMeshes(fname)
1507 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1508 m=MEDFileFieldMultiTS()
1509 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1511 m=MEDFileFields(fname)
1513 m=MEDFileData(fname)
1515 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1516 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1517 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1518 m=MEDCouplingCMesh()
1519 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1520 m=MEDCouplingFieldTemplate(ON_NODES)
1521 m=MEDCouplingMultiFields([])
1522 m=MEDCouplingFieldOverTime([])
1525 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1526 def testBugSemiPartialField(self):
1527 fname="Pyfile46.med"
1528 m=MEDLoaderDataForTest.build2DMesh_3()
1529 m=m[:10] ; m.setName("mesh")
1530 f=m.getMeasureField(ON_CELLS)
1531 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1533 f.setName("SemiPartialField")
1535 f1=f[:6] ; f1.getMesh().setName(m.getName())
1536 f2=f[6:] ; f2.getMesh().setName(m.getName())
1538 mm=MEDFileUMesh.New()
1539 mm.setMeshAtLevel(0,m)
1540 ff=MEDFileField1TS.New()
1541 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1545 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1546 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1547 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1549 fread.checkConsistencyLight()
1550 fread2.checkConsistencyLight()
1551 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1552 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1555 def testUnPolyze1(self):
1556 fname="Pyfile47.med"
1557 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1558 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]
1559 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1560 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]]))
1562 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1563 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1564 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1565 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1566 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1567 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1568 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1569 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1571 mm.setRenumFieldArr(0,None)
1572 mm.setFamilyFieldArr(-1,None)
1575 def testUnPolyze2(self):
1576 fname="Pyfile48.med"
1577 mfd=MEDFileData.New()
1578 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1579 meshes=MEDFileMeshes.New()
1581 mfd.setMeshes(meshes)
1582 fields=MEDFileFields.New()
1583 mfd.setFields(fields)
1584 ff=MEDFileFieldMultiTS.New()
1585 fields.pushField(ff)
1587 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1588 f0_0.setTime(9.5,3,4)
1589 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1591 f0_0.setMesh(mm.getMeshAtLevel(0))
1592 ff.appendFieldNoProfileSBT(f0_0)
1593 ff0=ff.getTimeStepAtPos(0)
1594 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1595 f0_1.setTime(9.5,3,4)
1596 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1597 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1598 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1600 ff0.setFieldProfile(f0_1,mm,0,pfl)
1601 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1602 f0_2.setTime(9.5,3,4)
1603 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1604 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
1605 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1607 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1608 mfd.getFields().shallowCpyGlobs(ff0)
1610 mfd.unPolyzeMeshes()
1612 fmts=mfd.getFields()[0]
1613 self.assertEqual(fmts.getNumberOfTS(),1)
1614 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1615 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1616 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))])
1617 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1618 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1619 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1620 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1621 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1622 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1623 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1624 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))
1625 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1626 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1627 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1628 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1629 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1630 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])
1631 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1632 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1633 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1634 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])
1635 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1640 def testGaussWriteOnPfl1(self):
1641 fname="Pyfile49.med"
1642 fname2="Pyfile50.med"
1643 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1644 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1645 mQ8.allocateCells(1)
1646 mQ8.insertNextCell(NORM_QUAD8,range(8))
1647 mQ8.finishInsertingCells()
1648 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1649 mQ4.allocateCells(1)
1650 mQ4.insertNextCell(NORM_QUAD4,range(4))
1651 mQ4.finishInsertingCells()
1652 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1653 mT3.allocateCells(1)
1654 mT3.insertNextCell(NORM_TRI3,range(3))
1655 mT3.finishInsertingCells()
1657 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.]]
1658 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1659 ms[:]=(elt.deepCopy() for elt in ms)
1660 for m,t in zip(ms,tr):
1661 d=m.getCoords() ; d+= t
1663 m=MEDCouplingUMesh.MergeUMeshes(ms)
1665 m2=m[:13] ; m2.setName(m.getName())
1666 ### 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.
1667 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1668 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1671 da=DataArrayDouble(34) ; da.iota(3.)
1673 f.setName("fieldCellOnPflWithoutPfl")
1674 fInvalid=f.deepCopy()
1675 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])
1676 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])
1677 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])
1678 f.checkConsistencyLight()
1679 fInvalid2=fInvalid.deepCopy()
1680 fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1683 mm.setMeshAtLevel(0,m)
1686 f1ts=MEDFileField1TS.New()
1687 pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1688 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1689 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1690 f1ts.setFieldProfile(f,mm,0,pfl)
1693 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1694 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1695 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1696 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1697 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1698 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1699 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1700 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1702 dataRead=MEDFileData.New(fname)
1703 mRead=dataRead.getMeshes()[0]
1704 f1tsRead=dataRead.getFields()[0][0]
1705 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1706 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1707 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1708 f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1709 f2_bis.checkConsistencyLight()
1710 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1712 WriteField(fname2,f,True)
1713 f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1714 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1715 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1716 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1717 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1718 m2=m[pfl] ; m2.setName(m.getName())
1721 da=DataArrayDouble(35) ; da.iota(3.)
1723 f.setName("fieldCellOnPflWithoutPfl2")
1724 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1725 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])
1726 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])
1727 f.checkConsistencyLight()
1730 mm.setMeshAtLevel(0,m)
1732 f1ts=MEDFileField1TS.New()
1733 f1ts.setFieldProfile(f,mm,0,pfl)
1734 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1735 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1736 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1737 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1739 dataRead=MEDFileData.New(fname)
1740 mRead=dataRead.getMeshes()[0]
1741 f1tsRead=dataRead.getFields()[0][0]
1742 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1743 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1744 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1745 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1746 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1747 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1748 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1750 WriteField(fname2,f,True)
1751 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1752 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1753 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1754 ## Use case 3 : no pfl but creation of pfls due to gauss pts
1755 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1758 da=DataArrayDouble(60) ; da.iota(3.)
1760 f.setName("fieldCellWithoutPfl")
1761 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])
1762 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])
1763 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])
1764 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])
1765 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])
1766 f.checkConsistencyLight()
1768 mm.setMeshAtLevel(0,m)
1769 f1ts=MEDFileField1TS.New()
1770 f1ts.setFieldNoProfileSBT(f)
1771 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1772 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1773 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1774 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1775 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1779 dataRead=MEDFileData.New(fname)
1780 mRead=dataRead.getMeshes()[0]
1781 f1tsRead=dataRead.getFields()[0][0]
1782 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1783 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1784 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1785 f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1786 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1787 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1789 WriteField(fname2,f,True)
1790 f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1791 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1792 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1795 # Testing profile on nodes when the profile is identity but not on all nodes.
1796 def testMEDFieldPflOnNode1(self):
1797 fname="Pyfile51.med"
1798 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)
1799 m0=MEDCouplingUMesh("Mesh",2)
1801 m0.insertNextCell(NORM_TRI3,[1,4,2])
1802 m0.insertNextCell(NORM_TRI3,[4,5,2])
1803 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1804 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1805 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1806 m0.finishInsertingCells()
1808 m1=MEDCouplingUMesh(m0.getName(),1)
1810 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1812 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1814 m1.finishInsertingCells()
1818 m.setMeshAtLevel(0,m0)
1819 m.setMeshAtLevel(-1,m1)
1821 dt=3 ; it=2 ; tim=4.5
1822 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1823 fieldNode0.setName("fieldNode0")
1824 fieldNode0.setTime(tim,dt,it)
1825 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1826 arr=DataArrayDouble([10,11,12,13,14])
1827 fieldNode0.setArray(arr)
1828 f0=MEDFileField1TS()
1829 f0.setFieldProfile(fieldNode0,m,0,pfl0)
1830 m.write(fname,2) ; f0.write(fname,0)
1831 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1832 fieldNode1.setName("fieldNode1")
1833 fieldNode1.setTime(tim,dt,it)
1834 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1835 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1836 fieldNode1.setArray(arr1)
1837 f1=MEDFileField1TS()
1838 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1841 ## Reading from file
1842 m=MEDFileMesh.New(fname)
1843 m0=m.getMeshAtLevel(0)
1844 m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1845 fieldNode0.setMesh(m00)
1846 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1847 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1848 ff0_1.checkConsistencyLight()
1849 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1850 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1851 ff0_2.checkConsistencyLight()
1852 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1853 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1854 ff0_3.checkConsistencyLight()
1855 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1856 ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1857 ff0_4.checkConsistencyLight()
1858 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1859 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1860 m1=m.getMeshAtLevel(-1)
1861 m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1862 fieldNode1.setMesh(m10)
1863 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1864 ff1_1.checkConsistencyLight()
1865 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1866 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1867 ff1_2.checkConsistencyLight()
1868 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1869 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1870 ff1_3.checkConsistencyLight()
1871 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1872 ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1873 ff1_4.checkConsistencyLight()
1874 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1875 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]
1876 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]
1877 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]
1878 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1879 arr_r.setName(fieldNode1.getArray().getName())
1880 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1881 pfl1_r.setName(pfl1.getName())
1882 self.assertTrue(pfl1_r.isEqual(pfl1))
1885 # Testing profile on nodes when the profile is identity but not on all nodes.
1886 def testMEDFieldPflOnCell1(self):
1887 fname="Pyfile52.med"
1888 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)
1889 m0=MEDCouplingUMesh("Mesh",2)
1891 m0.insertNextCell(NORM_TRI3,[1,4,2])
1892 m0.insertNextCell(NORM_TRI3,[4,5,2])
1893 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1894 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1895 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1896 m0.finishInsertingCells()
1898 m1=MEDCouplingUMesh(m0.getName(),1)
1900 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1902 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1904 m1.finishInsertingCells()
1908 m.setMeshAtLevel(0,m0)
1909 m.setMeshAtLevel(-1,m1)
1911 dt=3 ; it=2 ; tim=4.5
1912 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1913 fieldCell0.setName("fieldCell0")
1914 fieldCell0.setTime(tim,dt,it)
1915 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1916 arr=DataArrayDouble([10,11,12])
1917 fieldCell0.setArray(arr)
1918 f0=MEDFileField1TS()
1919 f0.setFieldProfile(fieldCell0,m,0,pfl0)
1920 m.write(fname,2) ; f0.write(fname,0)
1921 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1922 fieldCell1.setName("fieldCell1")
1923 fieldCell1.setTime(tim,dt,it)
1924 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1925 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1926 fieldCell1.setArray(arr1)
1927 f1=MEDFileField1TS()
1928 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1931 ## Reading from file
1932 m=MEDFileMesh.New(fname)
1933 m0=m.getMeshAtLevel(0)
1934 m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1935 fieldCell0.setMesh(m00)
1936 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1937 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1938 ff0_1.checkConsistencyLight()
1939 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1940 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1941 ff0_2.checkConsistencyLight()
1942 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1943 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1944 ff0_3.checkConsistencyLight()
1945 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1946 ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1947 ff0_4.checkConsistencyLight()
1948 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1949 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1950 m1=m.getMeshAtLevel(-1)
1951 m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1952 fieldCell1.setMesh(m10)
1953 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1954 ff1_1.checkConsistencyLight()
1955 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1956 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1957 ff1_2.checkConsistencyLight()
1958 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1959 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1960 ff1_3.checkConsistencyLight()
1961 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1962 ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1963 ff1_4.checkConsistencyLight()
1964 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1965 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]
1966 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]
1967 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]
1968 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1969 arr_r.setName(fieldCell1.getArray().getName())
1970 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1971 pfl1_r.setName(pfl1.getName())
1972 self.assertTrue(pfl1_r.isEqual(pfl1))
1975 def testMEDFileUMeshZipCoords1(self):
1977 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1978 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])
1979 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1980 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1981 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1982 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1983 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1984 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1985 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1986 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1987 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1988 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1990 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1991 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1992 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1993 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1994 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1995 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1996 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1997 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1998 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2001 def testMEDUMeshAddNodeGroup1(self):
2002 fname="Pyfile53.med"
2004 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2005 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])
2006 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2007 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2008 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2009 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2010 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2013 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2014 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2015 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2016 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2017 mm.setFamilyId("MyFam",2)
2018 mm.setFamilyId("MyOtherFam",3)
2019 mm.setFamilyId("MyOther-1",-1)
2020 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2021 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2023 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2024 mm.addNodeGroup(daTest)
2025 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2026 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2027 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2028 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2030 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2031 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2032 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2033 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2034 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2035 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2037 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2038 da=DataArrayInt([3,12]) ; da.setName("grp0")
2039 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2041 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2043 mm=MEDFileMesh.New(fname)
2044 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2045 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2046 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2047 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2049 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2050 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2051 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2052 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2053 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2054 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2056 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2057 da=DataArrayInt([3,12]) ; da.setName("grp0")
2058 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2060 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2063 def testMEDUMeshAddGroup1(self):
2064 fname="Pyfile54.med"
2066 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2067 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2069 m0.insertNextCell(NORM_TRI3,[1,2,1])
2072 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2075 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2077 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2078 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2079 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2080 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2081 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2084 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2085 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2086 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2087 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2088 mm.setFamilyId("MyFam",2)
2089 mm.setFamilyId("MyOtherFam",3)
2090 mm.setFamilyId("MyOther-1",-1)
2091 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2092 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2094 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2095 mm.addGroup(0,daTest)
2096 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2097 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2098 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2099 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2101 self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2102 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2103 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2104 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2105 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2106 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2108 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2109 da=DataArrayInt([3,12]) ; da.setName("grp0")
2110 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2112 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2114 mm=MEDFileMesh.New(fname)
2115 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2116 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2117 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2118 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2120 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2121 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2122 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2123 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2124 for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2125 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2127 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2128 da=DataArrayInt([3,12]) ; da.setName("grp0")
2129 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2131 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2134 def testHeapMem1(self):
2135 a=DataArrayInt() ; aa=a.getHeapMemorySize()
2137 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2139 m=MEDCouplingCMesh()
2140 arr=DataArrayDouble(10,1) ; arr.iota(0)
2141 m.setCoords(arr,arr)
2142 m=m.buildUnstructured()
2144 f=m.getMeasureField(ON_CELLS)
2145 self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100+4*strMulFac))
2146 self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100+8*strMulFac))
2149 mm.setMeshAtLevel(0,m)
2150 self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,4225+100+10*strMulFac))
2151 ff=MEDFileField1TS()
2152 ff.setFieldNoProfileSBT(f)
2153 self.assertIn(ff.getHeapMemorySize(),xrange(771-40,871+21+(4+1)*strMulFac))
2155 fff=MEDFileFieldMultiTS()
2156 fff.appendFieldNoProfileSBT(f)
2157 self.assertIn(fff.getHeapMemorySize(),xrange(815-50,915+30+(6+2)*strMulFac))
2159 fff.appendFieldNoProfileSBT(f)
2160 self.assertIn(fff.getHeapMemorySize(),xrange(1594-90,1794+50+(10+1)*strMulFac))
2161 self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(771-40,871+20+(4+1)*strMulFac))
2164 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2165 fff.appendFieldProfile(f2,mm,0,pfl)
2166 self.assertIn(fff.getHeapMemorySize(),xrange(2348-130,2608+100+(10+2)*strMulFac))
2167 self.assertIn(fff.getProfile("pfl").getHeapMemorySize(),xrange(204-10,204+10+2*strMulFac))
2168 self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(738-50,838+30+4*strMulFac))
2171 def testCurveLinearMesh1(self):
2172 fname="Pyfile55.med"
2173 mesh=MEDCouplingCurveLinearMesh();
2174 mesh.setTime(2.3,4,5);
2175 mesh.setTimeUnit("us");
2176 mesh.setName("Example of Cuve linear mesh");
2177 mesh.setDescription("buildCLMesh");
2178 a1=DataArrayDouble(3*20,1);
2179 a1.iota(7.) ; a1.rearrange(3);
2181 mesh.setNodeGridStructure([4,5]);
2182 mesh.checkConsistencyLight();
2184 m=MEDFileCurveLinearMesh()
2186 d=DataArrayInt(20) ; d.iota(4)
2187 m.setFamilyFieldArr(1,d)
2188 d3=DataArrayInt(20) ; d3.iota(400)
2189 m.setRenumFieldArr(1,d3)
2190 d2=DataArrayInt(12) ; d2.iota(40)
2191 m.setFamilyFieldArr(0,d2)
2192 d4=DataArrayInt(21) ; d4.iota(4000)
2193 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2195 m.setRenumFieldArr(1,d4)
2198 m1=MEDFileCurveLinearMesh(fname)
2200 self.assertTrue(mm.isEqual(mesh,1e-12))
2201 self.assertEqual(mm.getSpaceDimension(),3)
2202 self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2204 m1=MEDFileMesh.New(fname)
2205 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2206 self.assertTrue(isinstance(m1.getUnivName(),str))
2207 self.assertTrue(len(m1.getUnivName())!=0)
2208 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2211 def testParameters1(self):
2212 fname="Pyfile56.med"
2213 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2214 mm=MEDFileCMesh() ; mm.setMesh(m)
2215 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2217 p=MEDFileParameters()
2218 data.setParams(p) ; data.setMeshes(ms)
2219 pts=MEDFileParameterMultiTS()
2220 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2221 pts.appendValue(1,2,3.4,567.89)
2222 pts.appendValue(2,3,5.6,999.123)
2223 pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2224 p.pushParam(pts) ; p.pushParam(pts2)
2226 p2=MEDFileParameters(fname)
2227 self.assertTrue(p.isEqual(p2,1e-14)[0])
2228 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2230 pts4=pts2.deepCopy()
2231 pts3=pts2.deepCopy()
2232 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2233 pts2.eraseTimeStepIds([0])
2234 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2236 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2237 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2238 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2239 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2240 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2242 self.assertTrue(p.isEqual(p2,1e-14)[0])
2243 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2244 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2245 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2246 self.assertEqual(p.getParamsNames(),('A','B'))
2247 ptsr=MEDFileParameterMultiTS(fname,"B")
2248 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2249 ptsr=MEDFileParameterMultiTS(fname)
2250 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2251 p1tsr=MEDFileParameterDouble1TS(fname)
2252 self.assertEqual(p1tsr.getName(),"A")
2253 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2254 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2255 self.assertEqual(p1tsr.getName(),"B")
2256 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2257 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2258 self.assertEqual(p1tsr.getName(),"B")
2259 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2260 data2=MEDFileData(fname)
2261 self.assertEqual(2,data2.getNumberOfParams())
2262 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2265 def testNamesOnCellAndNodesInMeshes1(self):
2266 fname="Pyfile58.med"
2267 fname2="Pyfile59.med"
2268 m=MEDLoaderDataForTest.build3DSurfMesh_1()
2269 m1=m.buildDescendingConnectivity()[0]
2270 m1.sortCellsInMEDFileFrmt()
2273 mm.setMeshAtLevel(0,m)
2274 mm.setMeshAtLevel(-1,m1)
2275 namesCellL0=DataArrayAsciiChar(6,16)
2276 namesCellL0[:]=["CellL0#%.3d "%(i) for i in xrange(6)]
2277 mm.setNameFieldAtLevel(0,namesCellL0)
2278 namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2279 namesCellL1[:]=["CellLM1#%.3d "%(i) for i in xrange(16)]
2280 mm.setNameFieldAtLevel(-1,namesCellL1)
2281 namesNodes=namesCellL1.subArray(4,16)
2282 namesNodes[:]=["Node#%.3d "%(i) for i in xrange(12)]
2283 mm.setNameFieldAtLevel(1,namesNodes)
2286 mmr=MEDFileMesh.New(fname)
2287 self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d "%(i) for i in xrange(6)])))
2288 self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d "%(i) for i in xrange(16)])))
2289 self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d "%(i) for i in xrange(12)])))
2290 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2291 mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2292 self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2293 mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2294 self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2296 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2297 # remove names on nodes
2298 mmCpy.setNameFieldAtLevel(1,None)
2299 self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2300 mm.setNameFieldAtLevel(1,None)
2301 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2302 mm.setNameFieldAtLevel(-1,None)
2304 mmr=MEDFileMesh.New(fname)
2305 self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2306 self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d "%(i) for i in xrange(6)])))
2307 self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2309 c=MEDCouplingCMesh()
2310 arr=DataArrayDouble([0.,1.1,2.3])
2311 c.setCoords(arr,arr)
2315 cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d "%(i) for i in xrange(4)]))
2316 cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d "%(i) for i in xrange(9)]))
2318 ccr=MEDFileMesh.New(fname2)
2319 self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d "%(i) for i in xrange(4)])))
2320 self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d "%(i) for i in xrange(9)])))
2321 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2322 ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2323 self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2324 ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2325 self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2327 self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2330 def testToExportInExamples1(self):
2331 m=MEDCouplingCMesh()
2332 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2333 m.setCoords(arr,arr)
2334 m=m.buildUnstructured() ; m.setName("mesh")
2335 grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2336 grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2339 mm.setMeshAtLevel(0,m)
2340 mm.setMeshAtLevel(-1,m2)
2341 mm.setGroupsAtLevel(0,[grp1,grp2])
2342 mm.write("example.med",2)
2344 m0=mm.getMeshAtLevel(0)
2345 m1=mm.getMeshAtLevel(-1)
2346 grp1=mm.getGroupArr(0,"grp1")
2347 grp2=mm.getGroupArr(0,"grp2")
2349 whichGrp=DataArrayInt(m0.getNumberOfCells())
2350 whichGrp.fillWithValue(-1)
2351 for grpId,grp in enumerate(grps):
2354 a,b,bI,c,cI=m0.buildDescendingConnectivity()
2355 e,f=a.areCellsIncludedIn(m1,2)
2357 c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2358 self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2359 c2.transformWithIndArr(whichGrp)
2360 splitOfM1=len(grps)*[None]
2361 for grpId,grp in enumerate(grps):
2362 tmp=c2.findIdsEqual(grpId)
2363 splitOfM1[grpId]=tmp
2365 splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2366 splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2369 def testBugCorrection1(self):
2372 self.assertEqual(fs[0],None)
2373 self.assertEqual(3,len(fs))
2376 def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2377 f1Name="Pyfile60.med"
2378 f2Name="Pyfile61.med"
2379 d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2381 d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2383 # reading and compare
2384 d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2385 for mn in d1.getMeshes().getMeshesNames():
2386 m1=d1.getMeshes()[mn]
2387 m2=d2.getMeshes()[mn]
2388 for lev in m1.getNonEmptyLevels():
2389 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2390 for grpName in grpsNames:
2391 self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2395 for fieldn in d1.getFields().getFieldsNames():
2396 f1=d1.getFields()[fieldn]
2397 f2=d2.getFields()[fieldn]
2398 for it,order,tim in f1.getTimeSteps():
2401 if len(f1t.getPflsReallyUsed())!=0:
2403 for lev in f1t.getNonEmptyLevels()[1]:
2404 arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2405 arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2406 self.assertTrue(pfl1.isEqual(pfl2))
2407 self.assertTrue(arr1.isEqual(arr2,1e-10))
2412 for lev in f1t.getNonEmptyLevels()[1]:
2413 f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2414 f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2415 self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2422 def testNonRegBugNormalizeFamIdsMEDFile1(self):
2423 m=MEDCouplingCMesh()
2424 arr=DataArrayDouble([0.,1.,2.,3.,4.])
2425 m.setCoords(arr,arr,arr)
2426 m=m.buildUnstructured()
2427 m2=m.buildDescendingConnectivity()[0]
2429 g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2430 g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2431 g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2432 g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2433 g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2434 g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2436 mm.setMeshAtLevel(0,m)
2437 mm.setGroupsAtLevel(0,[g1,g2])
2438 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2439 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2440 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2441 mm.normalizeFamIdsMEDFile()
2442 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2443 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2444 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2445 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2446 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2447 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2448 for g in mm.getGroupsOnSpecifiedLev(0):
2449 for f in mm.getFamiliesIdsOnGroup(g):
2450 self.assertTrue(f<0)
2455 mm.setMeshAtLevel(0,m)
2456 mm.setMeshAtLevel(-1,m2)
2457 mm.setGroupsAtLevel(0,[g1,g2])
2458 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2459 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2460 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2461 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2462 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2463 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2464 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2465 mm.normalizeFamIdsMEDFile()
2466 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2467 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2468 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2469 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2470 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2471 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2472 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2473 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2474 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2475 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2476 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2477 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2479 for g in mm.getGroupsOnSpecifiedLev(lev):
2480 for f in mm.getFamiliesIdsOnGroup(g):
2481 self.assertTrue(f<0)
2487 mm.setMeshAtLevel(0,m)
2488 mm.setMeshAtLevel(-1,m2)
2489 mm.setGroupsAtLevel(0,[g1,g2])
2490 mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2491 mm.setGroupsAtLevel(1,[g1Node,g2Node])
2492 s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2493 s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2494 s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2495 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2496 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2497 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2498 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2499 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2500 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2501 mm.normalizeFamIdsMEDFile()
2502 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2503 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2504 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2505 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2506 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2507 self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2508 self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2509 self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2510 self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2511 self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2512 self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2513 self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2514 self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2515 self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2516 self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2517 self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2518 self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2519 self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2521 for g in mm.getGroupsOnSpecifiedLev(lev):
2522 for f in mm.getFamiliesIdsOnGroup(g):
2523 self.assertTrue(f<0)
2527 for g in mm.getGroupsOnSpecifiedLev(1):
2528 for f in mm.getFamiliesIdsOnGroup(g):
2529 self.assertTrue(f>0)
2534 def testNonRegressionMantis22212ChangeGrpName(self):
2535 fileName="Pyfile62.med"
2536 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2537 m=MEDFileUMesh.New()
2538 m.setCoords(m2.getCoords())
2539 m.setMeshAtLevel(0,m2)
2540 m.setMeshAtLevel(-1,m1)
2541 m.setMeshAtLevel(-2,m0)
2542 m.setFamilyFieldArr(0,f2)
2543 m.setFamilyFieldArr(-1,f1)
2544 m.setFamilyFieldArr(-2,f0)
2545 m.setFamilyFieldArr(1,p)
2547 for i in xrange(nbOfFams):
2548 m.addFamily(fns[i],fids[i])
2551 for i in xrange(nbOfGrps):
2552 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2554 m.setName(m2.getName())
2555 m.setDescription(m2.getDescription())
2558 mm0=MEDFileMesh.New(fileName)
2559 mm1=MEDFileMesh.New(fileName)
2560 groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2561 for name in groupNamesIni:
2562 mm1.changeGroupName(name,name+'N')
2564 mm1.write(fileName,2)
2567 mm2=MEDFileMesh.New(fileName)
2568 for name in groupNamesIni:
2569 for lev in mm0.getGrpNonEmptyLevelsExt(name):
2570 arr0=mm0.getGroupArr(lev,name)
2571 arr2=mm2.getGroupArr(lev,name+'N')
2572 arr0.setName(name+'N')
2573 self.assertTrue(arr0.isEqual(arr2))
2578 def testInt32InMEDFileFieldStar1(self):
2579 fname="Pyfile63.med"
2580 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2581 f1=f1.convertToIntField()
2583 mm1=MEDFileUMesh.New()
2584 mm1.setCoords(m1.getCoords())
2585 mm1.setMeshAtLevel(0,m1)
2586 mm1.setName(m1.getName())
2588 ff1=MEDFileIntField1TS()
2589 ff1.setFieldNoProfileSBT(f1)
2590 a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2591 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2592 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2594 ff2=MEDFileAnyTypeField1TS.New(fname)
2595 self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2596 self.assertEqual(ff2.getTime(),[0,1,2.0])
2597 self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2598 a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2599 self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2600 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2602 c=ff2.getUndergroundDataArray() ; c*=2
2603 ff2.write(fname,0) # 2 time steps in
2604 ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2605 self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2606 self.assertEqual(len(ffs1),2)
2607 self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2608 a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2609 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2610 a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2611 self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2612 it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2613 a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2614 self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2615 f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2616 self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
2617 bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2619 a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2622 self.assertTrue(bc.isEqual(3*f1.getArray()))
2623 nf1=MEDCouplingFieldInt(ON_NODES)
2624 nf1.setTime(9.,10,-1)
2625 nf1.setMesh(f1.getMesh())
2626 narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2627 nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2628 nff1=MEDFileIntField1TS.New()
2629 nff1.setFieldNoProfileSBT(nf1)
2630 self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2631 self.assertEqual(nff1.getTime(),[10,-1,9.0])
2634 nf2=MEDCouplingFieldInt(ON_NODES)
2635 nf2.setTime(19.,20,-11)
2636 nf2.setMesh(f1.getMesh())
2637 narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0]
2638 nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2639 nff2=MEDFileIntField1TS.New()
2640 npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2641 nff2.setFieldProfile(nf2,mm1,0,npfl)
2642 nff2.getFieldWithProfile(ON_NODES,0,mm1)
2643 a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2644 self.assertTrue(b.isEqual(npfl))
2645 self.assertTrue(a.isEqual(narr2))
2647 nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2648 a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2649 self.assertTrue(b.isEqual(npfl))
2650 self.assertTrue(a.isEqual(narr2))
2652 nf3=MEDCouplingFieldDouble(ON_NODES)
2653 nf3.setName("VectorFieldOnNodesDouble")
2654 nf3.setTime(29.,30,-21)
2655 nf3.setMesh(f1.getMesh())
2656 nf3.setArray(f1.getMesh().getCoords())
2657 nff3=MEDFileField1TS.New()
2658 nff3.setFieldNoProfileSBT(nf3)
2660 fs=MEDFileFields(fname)
2661 self.assertEqual(len(fs),4)
2662 ffs=[it for it in fs]
2663 self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2664 self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2665 self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2666 self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2668 self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2669 self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2670 self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2671 self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2672 self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2674 nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2675 self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2676 self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2677 self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2678 MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2679 self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2680 MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2681 self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2683 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2684 self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2685 self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2686 self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2689 def testMEDFileFields1(self):
2690 fname="Pyfile64.med"
2691 f1=MEDCouplingFieldDouble(ON_NODES)
2692 f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2693 c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2694 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2696 arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2698 f1.setName("Field1")
2699 ff1=MEDFileField1TS.New()
2700 ff1.setFieldNoProfileSBT(f1)
2701 self.assertEqual(ff1.getDtUnit(),"us")
2703 f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2704 f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2706 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2707 ff1s=MEDFileFieldMultiTS(fname,"Field1")
2708 ff1s.setName("Field2")
2710 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2711 f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2712 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2713 self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2714 self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2715 f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2716 self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2717 self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2720 # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2721 def testMEDFileFields2(self):
2722 fname="Pyfile65.med"
2723 # to check that all is initialize
2724 MEDFileField1TS().__str__()
2725 MEDFileFieldMultiTS().__str__()
2726 # building a mesh containing 4 tri3 + 5 quad4
2727 tri=MEDCouplingUMesh("tri",2)
2728 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2729 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2730 tris=[tri.deepCopy() for i in xrange(4)]
2731 for i,elt in enumerate(tris): elt.translate([i,0])
2732 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2733 quad=MEDCouplingUMesh("quad",2)
2734 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2735 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2736 quads=[quad.deepCopy() for i in xrange(5)]
2737 for i,elt in enumerate(quads): elt.translate([5+i,0])
2738 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2739 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2740 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2742 fmts0_0=MEDFileFieldMultiTS()
2743 fmts0_1=MEDFileFieldMultiTS()
2745 for i in xrange(10):
2746 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2747 d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2748 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2749 f.setTime(float(i+1)+0.1,i+1,-i-1)
2750 fmts0_0.appendFieldNoProfileSBT(f)
2751 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2752 self.assertEqual(fmts0_1.getName(),name1)
2753 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2754 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2756 # components names have been modified to generate errors
2757 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2758 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2759 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2760 f1ts.setInfo(['aa [bb]','eee [dd]'])
2761 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2763 # add a mismatch of nb of compos
2765 fmts0_2=fmts0_0.deepCopy()
2766 fmts0_3=fmts0_0.deepCopy()
2767 fmts0_4=fmts0_0.deepCopy()
2768 fmts0_5=fmts0_0.shallowCpy()
2769 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)
2771 self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2772 del fmts0_3[[1.1,(6,-6),9]]
2773 self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2774 fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2775 self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2776 self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2777 fmts0_7=fmts0_4[::-3]
2778 self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2779 self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2782 fs0.pushField(fmts0_0)
2783 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2784 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2785 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2786 self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2788 fs0=MEDFileFields(fname)
2789 self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2790 fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2791 self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2792 del fs1[["2ndField",3]]
2793 self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2794 fs2=fs0[[0,"4thField"]]
2795 self.assertTrue(isinstance(fs2,MEDFileFields))
2796 self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2798 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2801 # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2802 def testMEDFileFields3(self):
2803 fname="Pyfile66.med"
2804 # building a mesh containing 4 tri3 + 5 quad4
2805 tri=MEDCouplingUMesh("tri",2)
2806 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2807 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2808 tris=[tri.deepCopy() for i in xrange(4)]
2809 for i,elt in enumerate(tris): elt.translate([i,0])
2810 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2811 quad=MEDCouplingUMesh("quad",2)
2812 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2813 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2814 quads=[quad.deepCopy() for i in xrange(5)]
2815 for i,elt in enumerate(quads): elt.translate([5+i,0])
2816 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2817 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2818 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2820 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2822 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2823 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2824 fmts0_0=MEDFileFieldMultiTS()
2825 fmts0_1=MEDFileFieldMultiTS()
2827 for i in xrange(10):
2828 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2829 d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2830 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2831 f.setTime(float(i+1)+0.1,i+1,-i-1)
2832 fmts0_0.appendFieldProfile(f,mm,0,pfl)
2833 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2834 self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2835 self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2838 self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2839 self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2840 fmts0_0.zipPflsNames()
2841 self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2842 self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2843 fmts0_2=fmts0_0.deepCopy()
2844 fmts0_3=fmts0_0.deepCopy()
2845 fmts0_4=fmts0_0.deepCopy()
2847 fs0.pushField(fmts0_0)
2848 fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2849 fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2850 fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2851 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2853 fmts0_5=MEDFileFieldMultiTS()
2855 infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2856 d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2857 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2858 f.setTime(float(i+1)+0.1,i+1,-i-1)
2859 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2861 fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2862 self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2863 fs0.checkGlobsCoherency()
2867 def testSplitComponents1(self):
2868 fname="Pyfile67.med"
2869 # building a mesh containing 4 tri3 + 5 quad4
2870 tri=MEDCouplingUMesh("tri",2)
2871 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2872 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2873 tris=[tri.deepCopy() for i in xrange(4)]
2874 for i,elt in enumerate(tris): elt.translate([i,0])
2875 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2876 quad=MEDCouplingUMesh("quad",2)
2877 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2878 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2879 quads=[quad.deepCopy() for i in xrange(5)]
2880 for i,elt in enumerate(quads): elt.translate([5+i,0])
2881 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2882 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2883 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2885 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2887 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2888 pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2890 fmts0_1=MEDFileFieldMultiTS()
2892 infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2893 for i in xrange(10):
2895 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2896 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2897 f.setTime(float(i+1)+0.1,i+1,-i-1)
2898 f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2899 self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2901 fs.pushField(fmts0_1)
2902 self.assertEqual(1,len(fs))
2903 l=fmts0_1.splitComponents()
2904 self.assertEqual(3,len(l))
2905 for elt in l: self.assertEqual(10,len(elt))
2906 for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2908 elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2911 self.assertEqual(4,len(fs))
2912 for elt in fs: self.assertEqual(10,len(elt))
2913 self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2914 self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2916 fs.write(fname,0) ; del fs
2918 fs1=MEDFileFields(fname)
2919 self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2920 self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2921 self.assertEqual(4,len(fs1))
2922 for i in xrange(10):
2923 for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2924 f1ts=fs1[fieldName][i]
2925 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2926 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2927 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2929 f1ts=fs1["1stField"][i]
2930 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2931 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2932 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2936 def testMEDFileFieldConvertTo1(self):
2937 fname="Pyfile68.med"
2938 # building a mesh containing 4 tri3 + 5 quad4
2939 tri=MEDCouplingUMesh("tri",2)
2940 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2941 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2942 tris=[tri.deepCopy() for i in xrange(4)]
2943 for i,elt in enumerate(tris): elt.translate([i,0])
2944 tris=MEDCouplingUMesh.MergeUMeshes(tris)
2945 quad=MEDCouplingUMesh("quad",2)
2946 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2947 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2948 quads=[quad.deepCopy() for i in xrange(5)]
2949 for i,elt in enumerate(quads): elt.translate([5+i,0])
2950 quads=MEDCouplingUMesh.MergeUMeshes(quads)
2951 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2952 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2953 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2955 ff0=MEDFileField1TS()
2956 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")
2957 f0.checkConsistencyLight()
2958 ff0.setFieldNoProfileSBT(f0)
2960 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2961 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2963 ff0i=ff0.convertToInt()
2964 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2965 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2967 ff1=ff0i.convertToDouble()
2968 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2969 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2971 del arr,f0,ff0,ff1,ff0i,fspExp
2972 ff0=MEDFileField1TS()
2973 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")
2974 f0.checkConsistencyLight()
2975 pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2976 ff0.setFieldProfile(f0,mm,0,pfl)
2977 fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2978 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2980 ff0i=ff0.convertToInt()
2981 self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2982 self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2983 self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2985 ff1=ff0i.convertToDouble()
2986 self.assertTrue(isinstance(ff1,MEDFileField1TS))
2987 self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2988 self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2990 ff0=MEDFileFieldMultiTS()
2991 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)
2992 f0.checkConsistencyLight()
2993 ff0.appendFieldProfile(f0,mm,0,pfl)
2994 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)
2995 f0.checkConsistencyLight()
2996 ff0.appendFieldProfile(f0,mm,0,pfl)
2997 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)
2998 f0.checkConsistencyLight()
2999 ff0.appendFieldProfile(f0,mm,0,pfl)
3000 ff1=ff0.convertToInt()
3001 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3002 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3003 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3004 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3005 arr=ff1.getUndergroundDataArray(dt,it)
3006 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3008 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3013 ff1=ff1.convertToDouble()
3014 self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3015 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3016 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3017 self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3018 arr=ff1.getUndergroundDataArray(dt,it)
3019 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3021 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3023 ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3024 self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3025 self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3026 for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()):
3027 self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3028 arr=ff1.getUndergroundDataArray(dt,it)
3029 arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3031 self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3034 def testMEDFileFieldPartialLoading(self):
3035 fname="Pyfile69.med"
3037 a=DataArrayInt() ; aa=a.getHeapMemorySize()
3039 strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3040 # building a mesh containing 30 tri3 + 40 quad4
3041 tri=MEDCouplingUMesh("tri",2)
3042 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3043 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3044 tris=[tri.deepCopy() for i in xrange(30)]
3045 for i,elt in enumerate(tris): elt.translate([i,0])
3046 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3047 quad=MEDCouplingUMesh("quad",2)
3048 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3049 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3050 quads=[quad.deepCopy() for i in xrange(40)]
3051 for i,elt in enumerate(quads): elt.translate([40+i,0])
3052 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3053 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3054 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3055 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3057 ff0=MEDFileField1TS()
3058 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")
3059 f0.checkConsistencyLight()
3060 ff0.setFieldNoProfileSBT(f0)
3063 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3064 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3066 ff0=MEDFileField1TS()
3067 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")
3068 f0.checkConsistencyLight()
3069 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3070 ff0.setFieldProfile(f0,mm,0,pfl)
3071 fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3072 self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3075 ff0=MEDFileField1TS(fname,False)
3076 self.assertEqual(ff0.getName(),"FieldCell")
3077 self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3078 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3079 heap_memory_ref=ff0.getHeapMemorySize()
3080 self.assertIn(heap_memory_ref,xrange(182,465+2*strMulFac))
3082 arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3083 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3084 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3086 ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3087 self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3088 heap_memory_ref=ff0.getHeapMemorySize()
3089 self.assertIn(heap_memory_ref,xrange(350,520+6*strMulFac))
3091 arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3092 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3093 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3095 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3096 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3097 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3098 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3100 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3101 ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3102 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3103 ff0.loadArraysIfNecessary() ##
3104 self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3105 self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3106 heap_memory_ref=ff0.getHeapMemorySize()
3107 self.assertIn(heap_memory_ref,xrange(1100,1384+2*strMulFac))
3109 hmd=ff0.getHeapMemorySize()-heap_memory_ref
3110 self.assertEqual(hmd,-800) # -50*8*2
3112 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3114 ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3115 heap_memory_ref=ff0.getHeapMemorySize()
3116 self.assertIn(heap_memory_ref,xrange(299,520+6*strMulFac))
3118 self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3119 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3121 fieldName="FieldCellMultiTS"
3122 ff0=MEDFileFieldMultiTS()
3123 for t in xrange(20):
3124 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)
3125 f0.setTime(float(t)+0.1,t,100+t)
3126 f0.checkConsistencyLight()
3127 ff0.appendFieldNoProfileSBT(f0)
3131 ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3132 heap_memory_ref=ff0.getHeapMemorySize()
3133 self.assertIn(heap_memory_ref,xrange(5536,8212+(80+26)*strMulFac))
3135 self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3138 ffs=MEDFileFields(fname,False)
3139 heap_memory_ref=ffs.getHeapMemorySize()
3140 self.assertIn(heap_memory_ref,xrange(5335,9031+(80+50)*strMulFac))
3142 self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3145 def testMEDFileMeshReadSelector1(self):
3146 mrs=MEDFileMeshReadSelector()
3147 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3148 mrs.__str__() ; mrs.__repr__()
3150 mrs=MEDFileMeshReadSelector(0)
3151 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())
3152 mrs=MEDFileMeshReadSelector(1)
3153 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3154 mrs=MEDFileMeshReadSelector(2)
3155 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3156 mrs=MEDFileMeshReadSelector(3)
3157 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3158 mrs=MEDFileMeshReadSelector(4)
3159 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3160 mrs=MEDFileMeshReadSelector(5)
3161 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3162 mrs=MEDFileMeshReadSelector(6)
3163 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3164 mrs=MEDFileMeshReadSelector(7)
3165 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3166 mrs=MEDFileMeshReadSelector(8)
3167 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3168 mrs=MEDFileMeshReadSelector(9)
3169 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3170 mrs=MEDFileMeshReadSelector(10)
3171 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3172 mrs=MEDFileMeshReadSelector(11)
3173 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3174 mrs=MEDFileMeshReadSelector(12)
3175 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3176 mrs=MEDFileMeshReadSelector(13)
3177 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3178 mrs=MEDFileMeshReadSelector(14)
3179 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3180 mrs=MEDFileMeshReadSelector(15)
3181 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3182 mrs=MEDFileMeshReadSelector(16)
3183 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3184 mrs=MEDFileMeshReadSelector(17)
3185 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3186 mrs=MEDFileMeshReadSelector(18)
3187 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3188 mrs=MEDFileMeshReadSelector(19)
3189 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3190 mrs=MEDFileMeshReadSelector(20)
3191 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3192 mrs=MEDFileMeshReadSelector(21)
3193 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3194 mrs=MEDFileMeshReadSelector(22)
3195 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3196 mrs=MEDFileMeshReadSelector(23)
3197 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3198 mrs=MEDFileMeshReadSelector(24)
3199 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3200 mrs=MEDFileMeshReadSelector(25)
3201 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3202 mrs=MEDFileMeshReadSelector(26)
3203 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3204 mrs=MEDFileMeshReadSelector(27)
3205 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3206 mrs=MEDFileMeshReadSelector(28)
3207 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3208 mrs=MEDFileMeshReadSelector(29)
3209 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3210 mrs=MEDFileMeshReadSelector(30)
3211 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3212 mrs=MEDFileMeshReadSelector(31)
3213 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3214 mrs=MEDFileMeshReadSelector(32)
3215 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3216 mrs=MEDFileMeshReadSelector(33)
3217 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3218 mrs=MEDFileMeshReadSelector(34)
3219 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3220 mrs=MEDFileMeshReadSelector(35)
3221 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3222 mrs=MEDFileMeshReadSelector(36)
3223 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3224 mrs=MEDFileMeshReadSelector(37)
3225 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3226 mrs=MEDFileMeshReadSelector(38)
3227 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3228 mrs=MEDFileMeshReadSelector(39)
3229 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3230 mrs=MEDFileMeshReadSelector(40)
3231 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3232 mrs=MEDFileMeshReadSelector(41)
3233 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3234 mrs=MEDFileMeshReadSelector(42)
3235 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3236 mrs=MEDFileMeshReadSelector(43)
3237 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3238 mrs=MEDFileMeshReadSelector(44)
3239 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3240 mrs=MEDFileMeshReadSelector(45)
3241 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3242 mrs=MEDFileMeshReadSelector(46)
3243 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3244 mrs=MEDFileMeshReadSelector(47)
3245 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3246 mrs=MEDFileMeshReadSelector(48)
3247 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3248 mrs=MEDFileMeshReadSelector(49)
3249 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3250 mrs=MEDFileMeshReadSelector(50)
3251 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3252 mrs=MEDFileMeshReadSelector(51)
3253 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3254 mrs=MEDFileMeshReadSelector(52)
3255 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3256 mrs=MEDFileMeshReadSelector(53)
3257 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3258 mrs=MEDFileMeshReadSelector(54)
3259 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3260 mrs=MEDFileMeshReadSelector(55)
3261 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3262 mrs=MEDFileMeshReadSelector(56)
3263 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3264 mrs=MEDFileMeshReadSelector(57)
3265 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3266 mrs=MEDFileMeshReadSelector(58)
3267 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3268 mrs=MEDFileMeshReadSelector(59)
3269 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3270 mrs=MEDFileMeshReadSelector(60)
3271 self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3272 mrs=MEDFileMeshReadSelector(61)
3273 self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3274 mrs=MEDFileMeshReadSelector(62)
3275 self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3276 mrs=MEDFileMeshReadSelector(63)
3277 self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3279 mrs=MEDFileMeshReadSelector(63)
3280 mrs.setCellFamilyFieldReading(False)
3281 self.assertEqual(mrs.getCode(),62)
3282 mrs.setCellFamilyFieldReading(True)
3283 self.assertEqual(mrs.getCode(),63)
3284 mrs.setNodeFamilyFieldReading(False)
3285 self.assertEqual(mrs.getCode(),61)
3286 mrs.setNodeFamilyFieldReading(True)
3287 self.assertEqual(mrs.getCode(),63)
3288 mrs.setCellNameFieldReading(False)
3289 self.assertEqual(mrs.getCode(),59)
3290 mrs.setCellNameFieldReading(True)
3291 self.assertEqual(mrs.getCode(),63)
3292 mrs.setNodeNameFieldReading(False)
3293 self.assertEqual(mrs.getCode(),55)
3294 mrs.setNodeNameFieldReading(True)
3295 self.assertEqual(mrs.getCode(),63)
3296 mrs.setCellNumFieldReading(False)
3297 self.assertEqual(mrs.getCode(),47)
3298 mrs.setCellNumFieldReading(True)
3299 self.assertEqual(mrs.getCode(),63)
3300 mrs.setNodeNumFieldReading(False)
3301 self.assertEqual(mrs.getCode(),31)
3302 mrs.setNodeNumFieldReading(True)
3303 self.assertEqual(mrs.getCode(),63)
3306 def testPartialReadOfMeshes(self):
3307 fname="Pyfile70.med"
3308 # building a mesh containing 4 tri3 + 5 quad4
3309 tri=MEDCouplingUMesh("tri",2)
3310 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3311 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3312 tris=[tri.deepCopy() for i in xrange(4)]
3313 for i,elt in enumerate(tris): elt.translate([i,0])
3314 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3315 quad=MEDCouplingUMesh("quad",2)
3316 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3317 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3318 quads=[quad.deepCopy() for i in xrange(5)]
3319 for i,elt in enumerate(quads): elt.translate([5+i,0])
3320 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3321 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3322 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3323 m1=m.buildDescendingConnectivity()[0]
3324 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3326 grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3327 grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3328 mm.setGroupsAtLevel(0,[grp0,grp1])
3329 grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3330 grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3331 mm.setGroupsAtLevel(-1,[grp2,grp3])
3332 grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3333 grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3334 mm.setGroupsAtLevel(1,[grp4,grp5])
3335 mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3336 mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3337 mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3341 mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3342 b4_ref_heap_mem=mm.getHeapMemorySize()
3343 mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3344 mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3345 ref_heap_mem=mm.getHeapMemorySize()
3346 # check the gain of memory using 1GTUMesh instead of UMesh
3347 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
3349 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3350 self.assertEqual(len(mm.getGroupsNames()),0)
3351 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3352 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3353 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3354 self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3355 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3356 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3357 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3358 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3359 delta1=ref_heap_mem-mm.getHeapMemorySize()
3360 self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3362 mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3363 self.assertEqual(len(mm.getGroupsNames()),6)
3364 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3365 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3366 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3367 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3368 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3369 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3370 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3371 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3372 delta2=ref_heap_mem-mm.getHeapMemorySize()
3373 self.assertTrue(delta2<delta1)
3374 self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3376 mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3377 self.assertEqual(len(mm.getGroupsNames()),6)
3378 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3379 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3380 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3381 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3382 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3383 self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3384 self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3385 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3386 delta3=ref_heap_mem-mm.getHeapMemorySize()
3387 self.assertTrue(delta3<delta2)
3388 self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3390 mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3391 self.assertEqual(len(mm.getGroupsNames()),6)
3392 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3393 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3394 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3395 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3396 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3397 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3398 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3399 self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3400 delta4=ref_heap_mem-mm.getHeapMemorySize()
3401 self.assertTrue(delta4<delta3)
3402 self.assertTrue(delta4>=32*4*2)
3404 mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3405 self.assertEqual(len(mm.getGroupsNames()),6)
3406 self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3407 self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3408 self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3409 self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3410 self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3411 self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3412 self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3413 self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3414 delta5=ref_heap_mem-mm.getHeapMemorySize()
3415 self.assertTrue(delta5<delta4)
3416 self.assertEqual(delta5,0)
3419 # this test checks that setFieldProfile perform a check of the array length
3420 # compared to the profile length. This test also checks that mesh attribute of field
3421 # is not used by setFieldProfile (because across this test mesh is equal to None)
3422 def testCheckCompatibilityPfl1(self):
3423 # building a mesh containing 4 tri3 + 5 quad4
3424 tri=MEDCouplingUMesh("tri",2)
3425 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3426 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3427 tris=[tri.deepCopy() for i in xrange(4)]
3428 for i,elt in enumerate(tris): elt.translate([i,0])
3429 tris=MEDCouplingUMesh.MergeUMeshes(tris)
3430 quad=MEDCouplingUMesh("quad",2)
3431 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3432 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3433 quads=[quad.deepCopy() for i in xrange(5)]
3434 for i,elt in enumerate(quads): elt.translate([5+i,0])
3435 quads=MEDCouplingUMesh.MergeUMeshes(quads)
3436 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3437 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3438 m1=m.buildDescendingConnectivity()[0]
3439 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3441 f1ts=MEDFileField1TS()
3442 f=MEDCouplingFieldDouble(ON_NODES)
3443 vals=DataArrayDouble(7) ; vals.iota(1000)
3445 f.setName("anonymous") # f has no mesh it is not a bug
3446 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3447 f1ts.setFieldProfile(f,mm,0,pfl)
3449 f1ts=MEDFileField1TS()
3450 f=MEDCouplingFieldDouble(ON_NODES)
3451 vals=DataArrayDouble(8) ; vals.iota(1000)
3453 f.setName("anonymous") # f has no mesh it is not a bug
3454 pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3455 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3457 f1ts=MEDFileField1TS()
3458 f=MEDCouplingFieldDouble(ON_CELLS)
3459 vals=DataArrayDouble(7) ; vals.iota(1000)
3461 f.setName("anonymous") # f has no mesh it is not a bug
3462 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3463 f1ts.setFieldProfile(f,mm,0,pfl)
3464 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3466 f1ts=MEDFileField1TS()
3467 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3468 vals=DataArrayDouble(27) ; vals.iota(1000)
3470 f.setName("anonymous") # f has no mesh it is not a bug
3471 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3473 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])
3474 f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3475 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])
3477 f1ts.setFieldProfile(f,mm,0,pfl)
3478 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3479 vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3480 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3481 vals=DataArrayDouble(27) ; vals.iota(1000)
3482 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3484 f1ts=MEDFileField1TS()
3485 f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3486 vals=DataArrayDouble(25) ; vals.iota(1000)
3488 f.setName("anonymous") # f has no mesh it is not a bug
3489 pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3490 f1ts.setFieldProfile(f,mm,0,pfl)
3491 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3492 vals2=DataArrayDouble(26) ; vals2.iota(1050)
3494 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3495 self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3497 f1ts=MEDFileField1TS()
3498 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3499 self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3501 f1ts.setFieldProfile(f,mm,0,pfl)
3504 def testWRMeshWithNoCells(self):
3505 fname="Pyfile71.med"
3506 a=DataArrayDouble(4) ; a.iota()
3507 c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3508 m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3510 m.setMeshAtLevel(0,m00)
3511 m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3512 m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3516 m=MEDFileMesh.New(fname)
3517 self.assertEqual((),m.getNonEmptyLevels())
3518 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))
3519 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3520 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3523 def testWRQPolyg1(self):
3524 fname="Pyfile72.med"
3525 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3526 m.insertNextCell([0,2,1,3])
3527 m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3529 ms=[m.deepCopy() for i in xrange(4)]
3530 for i,elt in enumerate(ms):
3531 elt.translate([float(i)*1.5,0.])
3533 m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3534 m0.convertAllToPoly()
3536 ms=[m.deepCopy() for i in xrange(5)]
3537 for i,elt in enumerate(ms):
3538 elt.translate([float(i)*1.5,1.5])
3540 m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3541 m1.convertAllToPoly()
3542 m1.convertLinearCellsToQuadratic()
3544 m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3547 mm.setMeshAtLevel(0,m)
3548 grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3549 grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3550 grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3551 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3556 mm_read=MEDFileUMesh(fname)
3557 self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3558 self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3559 self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3560 self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3562 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3564 arr0=DataArrayDouble(9) ; arr0.iota()
3565 arr1=DataArrayDouble(9) ; arr1.iota(100)
3566 arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3567 f.setArray(arr) ; f.checkConsistencyLight()
3569 ff=MEDFileField1TS()
3570 ff.setFieldNoProfileSBT(f)
3573 ff_read=MEDFileField1TS(fname)
3574 f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3575 self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3578 def testLoadIfNecessaryOnFromScratchFields0(self):
3580 This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3582 fname="Pyfile77.med"
3583 coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3584 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3586 m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3587 m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3588 m.finishInsertingCells()
3590 mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3591 ms=MEDFileMeshes() ; ms.pushMesh(mm)
3595 ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3596 f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3598 f0.setName("myELNOField")
3599 arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3600 f0.setArray(arrs[0])
3601 ff0.appendFieldNoProfileSBT(f0)
3604 arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3605 f0.setArray(arrs[1])
3606 ff0.appendFieldNoProfileSBT(f0)
3609 arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3610 f0.setArray(arrs[2])
3611 ff0.appendFieldNoProfileSBT(f0)
3614 arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3615 f0.setArray(arrs[3])
3616 ff0.appendFieldNoProfileSBT(f0)
3618 for i,arr in enumerate(arrs):
3619 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3620 fs[0][i].loadArraysIfNecessary()
3621 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3623 fs.loadArraysIfNecessary()
3624 for i,arr in enumerate(arrs):
3625 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3627 fs[0].loadArraysIfNecessary()
3628 for i,arr in enumerate(arrs):
3629 self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3633 def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3634 """ 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.
3636 fname="Pyfile78.med"
3637 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)
3638 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3639 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3641 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
3642 m0.insertNextCell(NORM_TETRA4,elt)
3644 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
3645 m0.insertNextCell(NORM_PYRA5,elt)
3647 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
3648 m0.insertNextCell(NORM_PENTA6,elt)
3650 m0.checkConsistency()
3651 m1=MEDCouplingUMesh(); m1.setName("mesh")
3652 m1.setMeshDimension(2);
3653 m1.allocateCells(5);
3654 m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3655 m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3656 m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3657 m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3658 m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3659 m1.setCoords(coords);
3660 m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3662 m3.insertNextCell(NORM_POINT1,[2])
3663 m3.insertNextCell(NORM_POINT1,[3])
3664 m3.insertNextCell(NORM_POINT1,[4])
3665 m3.insertNextCell(NORM_POINT1,[5])
3668 mm.setMeshAtLevel(0,m0)
3669 mm.setMeshAtLevel(-1,m1)
3670 mm.setMeshAtLevel(-3,m3)
3672 #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3673 mm=MEDFileMesh.New(fname)
3675 fmts=MEDFileFieldMultiTS()
3676 f1ts=MEDFileField1TS()
3677 for lev in mm.getNonEmptyLevels():
3678 for gt in mm.getGeoTypesAtLevel(lev):
3679 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3680 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3681 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3682 f.setArray(arr) ; f.setName("f0")
3683 f1ts.setFieldNoProfileSBT(f)
3686 self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3687 for lev in [0,-1,-3]:
3688 mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3690 fmts.pushBackTimeStep(f1ts)
3694 #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3695 fs=MEDFileFields(fname)
3696 self.assertEqual(len(fs),1)
3697 self.assertEqual(len(fs[0]),1)
3699 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),'','')])])
3700 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))
3703 def testMEDFileUMeshSetName(self):
3704 """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the convertion is performed in memory and a preparation is done then.
3705 This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3707 fname="Pyfile79.med"
3708 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3710 m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3711 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)
3712 m0.allocateCells(5);
3713 m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3714 m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3715 m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3716 m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3717 m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3718 m0.setCoords(coords);
3719 mm.setMeshAtLevel(0,m0)
3720 m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3722 m2.insertNextCell(NORM_POINT1,[2])
3723 m2.insertNextCell(NORM_POINT1,[3])
3724 m2.insertNextCell(NORM_POINT1,[4])
3725 m2.insertNextCell(NORM_POINT1,[5])
3726 mm.setMeshAtLevel(-2,m2)
3727 self.assertEqual(mm.getName(),"")
3728 self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3729 mm.forceComputationOfParts()
3730 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3732 self.assertEqual(mm.getName(),"abc")
3733 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3734 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3735 self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3736 self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3739 def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3740 fileName="Pyfile80.med"
3741 m=MEDCouplingCMesh() ; m.setName("cmesh")
3742 arr=DataArrayDouble(6) ; arr.iota()
3743 m.setCoords(arr,arr)
3744 nbCells=m.getNumberOfCells()
3745 self.assertEqual(25,nbCells)
3746 f=MEDCouplingFieldDouble(ON_CELLS)
3747 f.setName("FieldOnCell") ; f.setMesh(m)
3748 arr=DataArrayDouble(nbCells) ; arr.iota()
3752 fmts=MEDFileFieldMultiTS()
3754 for i in xrange(nbCells):
3755 t=(float(i)+0.1,i+1,-i-2)
3757 arr2=DataArrayDouble(nbCells)
3758 perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3761 f1ts=MEDFileField1TS()
3762 f1ts.setFieldNoProfileSBT(f)
3763 fmts.pushBackTimeStep(f1ts)
3765 fmts.unloadArraysWithoutDataLoss()
3766 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))
3767 fs=MEDFileFields() ; fs.pushField(fmts)
3768 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))
3769 fs.unloadArraysWithoutDataLoss()
3770 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))
3772 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))
3773 f1ts.unloadArraysWithoutDataLoss()
3774 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))
3775 mm.write(fileName,2)
3776 fs.write(fileName,0)
3777 del m,fmts,mm,f,f1ts
3779 mm=MEDFileMesh.New(fileName)
3780 fmts=MEDFileFieldMultiTS(fileName)
3781 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))
3782 fmts.unloadArraysWithoutDataLoss()
3783 self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3784 fmts.loadArraysIfNecessary()
3785 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))
3787 fs=MEDFileFields(fileName)
3788 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))
3789 fs.unloadArraysWithoutDataLoss()
3790 self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3791 fs.loadArraysIfNecessary()
3792 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))
3794 f1ts=MEDFileField1TS(fileName)
3795 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))
3796 f1ts.unloadArraysWithoutDataLoss()
3797 self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3798 f1ts.loadArraysIfNecessary()
3799 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))
3802 def testMEDFileUMeshLoadPart1(self):
3803 """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specfied using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
3804 memory of the returned instance.
3806 fileName="Pyfile81.med"
3807 arr=DataArrayDouble(6) ; arr.iota()
3808 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3809 m=m.buildUnstructured()
3811 m.changeSpaceDimension(3,0.)
3812 infos=["aa [b]","cc [de]","gg [klm]"]
3813 m.getCoords().setInfoOnComponents(infos)
3814 m.checkConsistency()
3816 mm.setMeshAtLevel(0,m)
3817 m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
3818 m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3819 mm.setMeshAtLevel(-1,m1)
3820 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])
3821 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])
3822 namesCellL0=DataArrayAsciiChar(25,16)
3823 namesCellL0[:]=["Cell#%.3d "%(i) for i in xrange(25)]
3824 renumM1=DataArrayInt([3,4,0,2,1])
3825 famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3826 mm.setRenumFieldArr(0,renum0)
3827 mm.setFamilyFieldArr(0,famField0)
3828 mm.setNameFieldAtLevel(0,namesCellL0)
3829 mm.setRenumFieldArr(-1,renumM1)
3830 mm.setFamilyFieldArr(-1,famFieldM1)
3831 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])
3832 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])
3833 namesNodes=DataArrayAsciiChar(36,16)
3834 namesNodes[:]=["Node#%.3d "%(i) for i in xrange(36)]
3835 mm.setRenumFieldArr(1,renum1)
3836 mm.setFamilyFieldArr(1,famField1)
3837 mm.setNameFieldAtLevel(1,namesNodes)
3838 mm.setFamilyId("Fam7",77)
3839 mm.setFamilyId("Fam8",88)
3840 mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3841 mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3842 mm.write(fileName,2)
3844 mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3845 self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3846 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])))
3847 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)
3848 self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3849 self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3850 self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3851 self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3852 self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3853 self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3854 self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3856 mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3857 self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3858 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])))
3859 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)
3860 self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3861 self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3862 self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3863 self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3864 self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3865 self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3866 self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3868 mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3869 self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3870 self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3871 self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3872 self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3873 self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3874 self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3875 self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3876 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])))
3877 self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3878 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)
3879 self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3880 self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3881 self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3882 self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3885 def testMEDFileFieldsLoadPart1(self):
3886 """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3888 fileName="Pyfile82.med"
3890 compos=["aa [kg]","bbb [m/s]"]
3891 arr=DataArrayDouble(6) ; arr.iota()
3892 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3893 m=m.buildUnstructured()
3895 m.changeSpaceDimension(3,0.)
3896 infos=["aa [b]","cc [de]","gg [klm]"]
3897 m.getCoords().setInfoOnComponents(infos)
3898 m.checkConsistency()
3899 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3901 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3903 arr[:,1]=range(100,125)
3905 WriteField(fileName,f,2)
3906 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3907 f.setName("FieldNode")
3908 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3909 arr[:,0]=range(200,236)
3910 arr[:,1]=range(300,336)
3912 f.checkConsistencyLight()
3913 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3916 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3918 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3919 self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3922 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3924 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3926 fs[0][0].loadArrays()
3927 arr=DataArrayDouble(12,2) ; arr[:,0]=range(3,15) ; arr[:,1]=range(103,115)
3928 arr.setInfoOnComponents(compos)
3929 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3930 fs[1][0].loadArrays()
3931 arr=DataArrayDouble(21,2) ; arr[:,0]=range(203,224) ; arr[:,1]=range(303,324)
3932 arr.setInfoOnComponents(compos)
3933 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3936 def testMEDFileWithoutCells1(self):
3937 fileName="Pyfile83.med"
3938 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3939 coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3943 mm.write(fileName,2)
3945 mm=MEDFileMesh.New(fileName)
3946 self.assertEqual(mm.getName(),"mesh")
3947 self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3950 def testZipCoordsWithLoadPart1(self):
3951 """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3953 fileName="Pyfile84.med"
3955 compos=["aa [kg]","bbb [m/s]"]
3956 arr=DataArrayDouble(6) ; arr.iota()
3957 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3958 m=m.buildUnstructured()
3960 m.changeSpaceDimension(3,0.)
3961 infos=["aa [b]","cc [de]","gg [klm]"]
3962 m.getCoords().setInfoOnComponents(infos)
3963 m.checkConsistency()
3964 f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3966 arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3968 arr[:,1]=range(100,125)
3970 WriteField(fileName,f,2)
3971 f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3972 f.setName("FieldNode")
3973 arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3974 arr[:,0]=range(200,236)
3975 arr[:,1]=range(300,336)
3977 f.checkConsistencyLight()
3978 WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3981 mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3983 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3984 self.assertEqual(spd.getSlice(),slice(4,6,1))
3985 spd=mm.getPartDefAtLevel(1)
3986 self.assertEqual(spd.getSlice(),slice(4,14,1))
3987 self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3988 mm.zipCoords() # <- The important line is here !
3989 spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3990 self.assertEqual(spd.getSlice(),slice(4,6,1))
3991 spd=mm.getPartDefAtLevel(1)
3992 self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3993 self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3994 fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3995 fs[0][0].loadArrays()
3996 arr=DataArrayDouble([(4,104),(5,105)])
3997 arr.setInfoOnComponents(compos)
3998 self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3999 fs[1][0].loadArrays()
4000 arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4001 arr.setInfoOnComponents(compos)
4002 self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4005 def testMEDFileCMeshSetGroupsAtLevel(self):
4006 """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4008 m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4010 mm=MEDFileCMesh() ; mm.setMesh(m)
4011 grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4012 mm.setGroupsAtLevel(0,[grp])
4013 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4016 def testMEDFileUMeshBuildExtrudedMesh1(self):
4017 """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4018 fileName="Pyfile85.med"
4021 meshName3DOut="Mesh3D"
4023 d1=DataArrayInt([0,4,20,24])
4024 d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4026 a=DataArrayDouble(6) ; a.iota()
4027 m=MEDCouplingCMesh() ; m.setCoords(a,a)
4028 m=m.buildUnstructured()
4029 d1c=d1.buildComplement(m.getNumberOfCells())
4030 m=m[d1c] ; m.zipCoords()
4031 m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4033 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4034 m.setName(meshName2D)
4035 mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4036 e=d.deltaShiftIndex().findIdsEqual(1)
4039 mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4040 grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4041 mm.setGroupsAtLevel(0,[grp0])
4042 grp1=e ; grp1.setName("grp1")
4043 mm.setGroupsAtLevel(-1,[grp1])
4044 mm.write(fileName,2)
4046 a=DataArrayDouble(3) ; a.iota()
4047 tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4048 tmp.setName(meshName1D)
4049 tmp.changeSpaceDimension(3)
4050 tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4052 mm1D.setMeshAtLevel(0,tmp)
4053 mm1D.write(fileName,0)
4055 mm2D=MEDFileMesh.New(fileName,meshName2D)
4056 mm1D=MEDFileMesh.New(fileName,meshName1D)
4057 m1D=mm1D.getMeshAtLevel(0)
4058 mm3D=mm2D.buildExtrudedMesh(m1D,0)
4060 self.assertEqual(mm3D.getName(),mm2D.getName())
4061 self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4062 self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4063 self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4064 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4065 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4066 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4067 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4068 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4069 self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4070 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.)])
4071 self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4072 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])
4073 self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4074 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])
4075 self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4076 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])
4077 self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4078 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])
4079 self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4080 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])
4081 self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4082 d=DataArrayInt(129) ; d.iota() ; d*=3
4083 self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4085 self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4086 self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4087 self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4088 self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4089 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])))
4090 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])))
4091 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])))
4092 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])))
4093 mm3D.setName("MeshExtruded")
4094 mm3D.write(fileName,0)
4097 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4098 def testMEDFileUMeshPickeling1(self):
4100 outFileName="Pyfile86.med"
4101 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)
4102 c.setInfoOnComponents(["aa","bbb"])
4103 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4104 m=MEDCouplingUMesh();
4105 m.setMeshDimension(2);
4107 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4108 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4109 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4110 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4111 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4112 m.finishInsertingCells();
4114 m.checkConsistencyLight()
4115 m1=MEDCouplingUMesh.New();
4116 m1.setMeshDimension(1);
4117 m1.allocateCells(3);
4118 m1.insertNextCell(NORM_SEG2,2,[1,4])
4119 m1.insertNextCell(NORM_SEG2,2,[3,6])
4120 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4121 m1.finishInsertingCells();
4123 m1.checkConsistencyLight()
4124 m2=MEDCouplingUMesh.New();
4125 m2.setMeshDimension(0);
4126 m2.allocateCells(4);
4127 m2.insertNextCell(NORM_POINT1,1,[1])
4128 m2.insertNextCell(NORM_POINT1,1,[3])
4129 m2.insertNextCell(NORM_POINT1,1,[2])
4130 m2.insertNextCell(NORM_POINT1,1,[6])
4131 m2.finishInsertingCells();
4133 m2.checkConsistencyLight()
4135 mm=MEDFileUMesh.New()
4136 self.assertTrue(mm.getUnivNameWrStatus())
4137 mm.setName("MyFirstMEDCouplingMEDmesh")
4138 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4142 mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4144 mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4145 # playing with groups
4146 g1_2=DataArrayInt.New()
4147 g1_2.setValues([1,3],2,1)
4149 g2_2=DataArrayInt.New()
4150 g2_2.setValues([1,2,3],3,1)
4152 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4153 g1_1=DataArrayInt.New()
4154 g1_1.setValues([0,1,2],3,1)
4156 g2_1=DataArrayInt.New()
4157 g2_1.setValues([0,2],2,1)
4159 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4160 g1_N=DataArrayInt.New()
4161 g1_N.setValues(range(8),8,1)
4163 g2_N=DataArrayInt.New()
4164 g2_N.setValues(range(9),9,1)
4166 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4167 mm.createGroupOnAll(0,"GrpOnAllCell")
4168 # check content of mm
4169 t=mm.getGroupArr(0,"G1",False)
4170 self.assertTrue(g1_2.isEqual(t));
4171 t=mm.getGroupArr(0,"G2",False)
4172 self.assertTrue(g2_2.isEqual(t));
4173 t=mm.getGroupArr(-1,"G1",False)
4174 self.assertTrue(g1_1.isEqual(t));
4175 t=mm.getGroupArr(-1,"G2",False)
4176 self.assertTrue(g2_1.isEqual(t));
4177 t=mm.getGroupArr(1,"G1",False)
4178 self.assertTrue(g1_N.isEqual(t));
4179 t=mm.getGroupArr(1,"G2",False)
4180 self.assertTrue(g2_N.isEqual(t));
4181 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4182 t=mm.getGroupArr(0,"GrpOnAllCell")
4184 st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4185 mm2=cPickle.loads(st)
4186 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4187 self.assertEqual(mm.getAxisType(),AX_CART)
4189 mm.setAxisType(AX_CYL)
4190 st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4191 mm2=cPickle.loads(st)
4192 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4193 self.assertEqual(mm2.getAxisType(),AX_CYL)
4196 def testMEDFileFieldsLoadSpecificEntities1(self):
4199 fileName="Pyfile87.med"
4203 m=MEDCouplingCMesh()
4204 arr=DataArrayDouble(nbNodes) ; arr.iota()
4206 m=m.buildUnstructured()
4209 fmts=MEDFileFieldMultiTS()
4210 for i in xrange(nbPdt):
4211 f=MEDCouplingFieldDouble(ON_NODES)
4213 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4215 f.setName(fieldName)
4216 f.setTime(float(i),i,0)
4217 fmts.appendFieldNoProfileSBT(f)
4220 mm=MEDFileUMesh() ; mm[0]=m
4221 fmts.write(fileName,2)
4222 mm.write(fileName,0)
4224 fs=MEDFileFields(fileName,False)
4225 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4226 fs.loadArraysIfNecessary()
4227 fs2.loadArraysIfNecessary()
4228 for i in xrange(nbPdt):
4229 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4231 m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4232 m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4233 m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4234 fmts=MEDFileFieldMultiTS()
4235 for i in xrange(nbPdt):
4236 f=MEDCouplingFieldDouble(ON_CELLS)
4238 arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4240 f.setName(fieldName)
4241 f.setTime(float(i),i,0)
4242 fmts.appendFieldNoProfileSBT(f)
4244 mm=MEDFileUMesh() ; mm[0]=m3
4246 self.assertEqual(mm.getNonEmptyLevels(),())
4248 self.assertEqual(mm.getNonEmptyLevels(),(0,))
4249 fmts.write(fileName,2)
4250 fs=MEDFileFields(fileName,False)
4251 fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4252 fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4253 fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4254 fs.loadArraysIfNecessary()
4255 fs2.loadArraysIfNecessary()
4256 fs3.loadArraysIfNecessary()
4257 fs4.loadArraysIfNecessary()
4258 for i in xrange(nbPdt):
4259 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4260 self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4261 self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4265 def testMEDFileLotsOfTSRW1(self):
4268 fileName="Pyfile88.med"
4269 nbPdt=300 # <- perftest = 30000
4272 maxPdt=100 # <- optimum = 500
4273 m=MEDCouplingCMesh()
4274 arr=DataArrayDouble(nbNodes) ; arr.iota()
4276 m=m.buildUnstructured()
4279 nbOfField=nbPdt/maxPdt
4281 for j in xrange(nbOfField):
4282 fmts=MEDFileFieldMultiTS()
4283 s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4284 for i in xrange(s.start,s.stop,s.step):
4285 f=MEDCouplingFieldDouble(ON_NODES)
4287 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4289 f.setName("%s_%d"%(fieldName,j))
4290 f.setTime(float(i),i,0)
4291 fmts.appendFieldNoProfileSBT(f)
4296 mm=MEDFileUMesh() ; mm[0]=m
4297 fs.write(fileName,2)
4298 mm.write(fileName,0)
4300 def appendInDict(d,key,val):
4307 allFields=GetAllFieldNames(fileName)
4309 pat=re.compile("([\d]+)([\s\S]+)$")
4310 for st in allFields:
4314 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4317 appendInDict(allFieldsDict,st,'')
4321 for k in allFieldsDict:
4322 if allFieldsDict[k]!=['']:
4323 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4326 for it in allFieldsDict[k]:
4327 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4332 for ii in xrange(nbIter):
4333 zeResu.pushBackTimeSteps(fmts2.pop())
4336 fs2.pushField(zeResu)
4338 self.assertEqual(fs2[0].getTimeSteps(),[(i,0,float(i)) for i in xrange(nbPdt)])
4341 def testMEDFileMeshRearrangeFamIds1(self):
4342 """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4343 fileName="Pyfile89.med"
4344 meshName='Maillage_2'
4346 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)])
4348 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])
4349 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])
4350 m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4351 m0.setConnectivity(c0,c0i)
4354 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])
4355 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])
4356 m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4357 m1.setConnectivity(c1,c1i)
4360 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])
4361 m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4362 m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4363 mm[-2]=m2.buildUnstructured()
4365 ref0=DataArrayInt(55) ; ref0[:]=0
4366 mm.setFamilyFieldArr(0,ref0)
4367 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]))
4368 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])
4369 mm.setFamilyFieldArr(-1,ref1)
4370 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])
4371 mm.setFamilyFieldArr(-2,ref2)
4373 for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4374 mm.setFamilyId(f,fid)
4375 for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4376 mm.setFamiliesOnGroup(grp,fams)
4377 mm.write(fileName,2)
4379 mm=MEDFileMesh.New(fileName)
4380 grp=mm.getGroup(-1,"Groupe_1")
4381 dai=grp.computeFetchedNodeIds()
4384 mm.rearrangeFamilies() # <- the aim of the test
4385 self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4386 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4387 self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4388 self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4389 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])))
4390 allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4391 allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4392 self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4393 for elt,fams in allGrps:
4394 self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4395 self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4396 for elt,eltId in allFams:
4397 self.assertEqual(mm.getFamilyId(elt),eltId)
4400 def testNonRegrCMeshSetFieldPfl1(self):
4401 """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4402 ff=MEDFileField1TS()
4405 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4409 field=MEDCouplingFieldDouble(ON_CELLS)
4411 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4412 field.setName("Field")
4413 field.checkConsistencyLight()
4414 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4415 ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4416 self.assertEqual(ff.getPfls(),())
4417 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4418 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4419 del ff,mm,field,field2,pfl
4420 # same with unstructured mesh
4421 ff=MEDFileField1TS()
4424 m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4427 m=m.buildUnstructured()
4429 field=MEDCouplingFieldDouble(ON_CELLS)
4431 field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4432 field.setName("Field")
4433 field.checkConsistencyLight()
4434 pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4435 ff.setFieldProfile(field,mm,0,pfl)
4436 self.assertEqual(ff.getPfls(),())
4437 field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4438 self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4441 def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4443 fileName="Pyfile90.med"
4444 fileName2="Pyfile91.med"
4445 arr=DataArrayDouble(5) ; arr.iota()
4446 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4447 m=m.buildUnstructured()
4448 d=DataArrayInt([3,7,11,15])
4451 m2=m[d.buildComplement(m.getNumberOfCells())]
4452 m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4453 m.changeSpaceDimension(3,0.)
4454 arr=DataArrayDouble(3) ; arr.iota()
4455 m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4456 m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4457 delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4458 m3D=m.buildExtrudedMesh(m1D,0)
4459 m3D.sortCellsInMEDFileFrmt()
4460 m3D.setName(meshName)
4461 m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4462 m1D=m2D.computeSkin() ; m1D.setName(meshName)
4463 m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4466 mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4467 grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4468 grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4469 grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4470 grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4471 diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4472 vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4473 vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4474 mm.setGroupsAtLevel(0,[vol1,vol2])
4475 mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4476 mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4478 mmOut1=mm.linearToQuadratic(0,0.)
4479 mmOut1.write(fileName2,2)
4480 mmOut2=mmOut1.quadraticToLinear(0.)
4481 self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4484 def testMEDFileMeshAddGroup1(self):
4485 m=MEDCouplingCMesh()
4486 arrX=DataArrayDouble(9) ; arrX.iota()
4487 arrY=DataArrayDouble(4) ; arrY.iota()
4488 m.setCoords(arrX,arrY)
4492 grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4494 grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4496 grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4498 grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4500 for grp in [grp0,grp1,grp2,grp3]:
4501 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4502 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4504 for grp in [grp0,grp1,grp2,grp3]:
4505 grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4506 mm.addGroup(1,grpNode)
4507 self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4508 for grp in [grp0,grp1,grp2,grp3]:
4509 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4510 for grp in [grp0,grp1,grp2,grp3]:
4511 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4512 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4513 mm.normalizeFamIdsMEDFile()
4514 for grp in [grp0,grp1,grp2,grp3]:
4515 self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4516 for grp in [grp0,grp1,grp2,grp3]:
4517 grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4518 self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4522 def testMEDFileJoint1(self):
4523 fileName="Pyfile92.med"
4524 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4525 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4529 mm.setDescription("un maillage")
4530 mm.write(fileName,2)
4531 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4532 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4533 one_step_joint=MEDFileJointOneStep()
4534 one_step_joint.pushCorrespondence(cell_correspond)
4535 one_step_joint.pushCorrespondence(node_correspond)
4536 one_joint=MEDFileJoint()
4537 one_joint.pushStep(one_step_joint)
4538 one_joint.setLocalMeshName("maa1")
4539 one_joint.setRemoteMeshName("maa1")
4540 one_joint.setDescription("joint_description")
4541 one_joint.setJointName("joint_1")
4542 one_joint.setDomainNumber(1)
4543 self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4544 self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4545 self.assertEqual( one_joint.getDescription(), "joint_description")
4546 self.assertEqual( one_joint.getJointName(), "joint_1")
4547 self.assertEqual( one_joint.getDomainNumber(), 1)
4548 joints=MEDFileJoints()
4549 joints.pushJoint(one_joint);
4550 joints.write(fileName,0)
4552 jointsR=MEDFileJoints(fileName,mm.getName())
4553 self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4554 jR = jointsR.getJointAtPos(0)
4555 self.assertTrue( jR.isEqual( one_joint ))
4556 self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4557 self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4558 jointsR.destroyJointAtPos(0)
4561 def testMEDFileJoint2(self):
4562 fileNameWr="Pyfile93.med"
4563 coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4564 coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4568 mm.setDescription("un maillage")
4569 node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4570 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4571 one_step_joint=MEDFileJointOneStep()
4572 two_step_joint=MEDFileJointOneStep()
4573 one_joint=MEDFileJoint()
4574 two_joint=MEDFileJoint()
4575 one_step_joint.pushCorrespondence(node_correspond)
4576 one_joint.pushStep(one_step_joint)
4577 two_step_joint.pushCorrespondence(cell_correspond)
4578 two_step_joint.pushCorrespondence(node_correspond)
4579 two_joint.pushStep(two_step_joint)
4580 one_joint.setLocalMeshName("maa1")
4581 one_joint.setRemoteMeshName("maa1")
4582 one_joint.setDescription("joint_description_1")
4583 one_joint.setJointName("joint_1")
4584 one_joint.setDomainNumber(1)
4585 two_joint.setLocalMeshName("maa1")
4586 two_joint.setRemoteMeshName("maa1")
4587 two_joint.setDescription("joint_description_2")
4588 two_joint.setJointName("joint_2")
4589 two_joint.setDomainNumber(2)
4590 joints=MEDFileJoints()
4591 joints.pushJoint(one_joint)
4592 joints.pushJoint(two_joint)
4593 mm.setJoints( joints )
4594 mm.write(fileNameWr,2)
4596 mm=MEDFileMesh.New(fileNameWr)
4597 self.assertEqual( mm.getNumberOfJoints(), 2)
4598 jointsR = mm.getJoints();
4599 self.assertEqual( jointsR.getMeshName(), mm.getName() )
4600 self.assertEqual( len( jointsR ), 2 )
4601 jointR1 = jointsR[0]
4602 jointR2 = jointsR[1]
4603 self.assertFalse( jointR1 is None )
4604 self.assertFalse( jointR2 is None )
4605 self.assertTrue( jointR1.isEqual( one_joint ))
4606 self.assertTrue( jointR2.isEqual( two_joint ))
4609 def testMEDFileJoint1(self):
4610 node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4611 cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4612 cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4613 cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4614 joint1st_1=MEDFileJointOneStep()
4615 joint1st_1.pushCorrespondence(cell_correspond)
4616 joint1st_1.pushCorrespondence(node_correspond)
4617 joint1st_2=MEDFileJointOneStep()
4618 joint1st_2.pushCorrespondence(cell_correspond)
4619 joint1st_2.pushCorrespondence(node_correspond)
4620 joint1st_3=MEDFileJointOneStep()
4621 joint1st_3.pushCorrespondence(node_correspond)
4622 joint1st_3.pushCorrespondence(cell_correspond)
4623 joint1st_4=MEDFileJointOneStep()
4624 joint1st_4.pushCorrespondence(cell_correspond)
4625 joint1st_5=MEDFileJointOneStep()
4626 joint1st_5.pushCorrespondence(cell_correspon2)
4627 joint1st_6=MEDFileJointOneStep()
4628 joint1st_6.pushCorrespondence(cell_correspon3)
4629 self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4630 self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4631 self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4632 self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4633 self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4634 one_joint=MEDFileJoint()
4635 one_joint.pushStep(joint1st_1)
4636 one_joint.setLocalMeshName("maa1")
4637 one_joint.setRemoteMeshName("maa2")
4638 one_joint.setDescription("joint_description")
4639 one_joint.setJointName("joint_1")
4640 one_joint.setDomainNumber(1)
4641 self.assertEqual( "maa1", one_joint.getLocalMeshName())
4642 self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4643 self.assertEqual( "joint_description", one_joint.getDescription())
4644 self.assertEqual( 1, one_joint.getDomainNumber())
4645 self.assertEqual( "joint_1", one_joint.getJointName())
4648 @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4649 def testMEDFileSafeCall0(self):
4650 """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4651 fname="Pyfile94.med"
4652 errfname="Pyfile94.err"
4653 class StdOutRedirect(object):
4654 def __init__(self,fileName):
4657 self.stdoutOld=os.dup(2)
4658 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
4659 fd2=os.dup2(self.fdOfSinkFile,2)
4660 self.origPyVal=sys.stderr
4661 class FlushFile(object):
4662 def __init__(self,f):
4668 return self.f.flush()
4670 return self.f.isatty()
4671 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
4674 sys.stderr=self.origPyVal
4675 #os.fsync(self.fdOfSinkFile)
4677 os.dup2(self.stdoutOld,2)
4678 os.close(self.stdoutOld)
4680 # first clean file if needed
4681 if os.path.exists(fname):
4684 # second : build a file from scratch
4685 m=MEDCouplingCMesh()
4686 arr=DataArrayDouble(11) ; arr.iota()
4687 m.setCoords(arr,arr)
4692 # third : change permissions to remove write access on created file
4693 os.chmod(fname,0444)
4694 # four : try to append data on file -> check that it raises Exception
4695 f=MEDCouplingFieldDouble(ON_CELLS)
4698 f.setArray(DataArrayDouble(100))
4699 f.getArray()[:]=100.
4700 f.checkConsistencyLight()
4701 f1ts=MEDFileField1TS()
4702 f1ts.setFieldNoProfileSBT(f)
4704 tmp=StdOutRedirect(errfname)
4705 self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4708 if os.path.exists(errfname):
4713 def testUnivStatus1(self):
4714 """ Non regression test to check the effectiveness of univ write status."""
4715 fname="Pyfile95.med"
4716 arr=DataArrayDouble(10) ; arr.iota()
4717 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4718 mm=MEDFileCMesh() ; mm.setMesh(m)
4719 mm.setUnivNameWrStatus(False) # test is here
4721 mm=MEDFileCMesh(fname)
4722 self.assertEqual(mm.getUnivName(),"")
4723 mm.setUnivNameWrStatus(True)
4725 mm=MEDFileCMesh(fname)
4726 self.assertTrue(mm.getUnivName()!="")
4729 def testEmptyMesh(self):
4730 """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4732 fname = "Pyfile96.med"
4733 m = MEDCouplingUMesh('toto', 2)
4734 m.setCoords(DataArrayDouble([], 0, 2))
4735 m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4736 mfu = MEDFileUMesh()
4737 mfu.setMeshAtLevel(0, m)
4739 mfu2 = MEDFileUMesh(fname)
4740 self.assertEqual('toto', mfu2.getName())
4741 lvl = mfu2.getNonEmptyLevels()
4742 self.assertEqual((), lvl)
4744 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4745 def testMEDFileUMeshPickeling2(self):
4746 """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4752 arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4753 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4754 mesh=MEDFileUMesh() ; mesh[0]=m
4755 m1=m.computeSkin() ; mesh[-1]=m1
4757 bary1=m1.computeCellCenterOfMass()[:,2]
4758 grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4759 grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4760 mesh.setGroupsAtLevel(-1,[grp1,grp2])
4763 st=cPickle.dumps(mesh,2)
4764 mm=cPickle.loads(st)
4765 st2=cPickle.dumps(mm,2)
4766 mm2=cPickle.loads(st2)
4767 self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4770 def testMEDFileEquivalence1(self):
4771 """ First check of equivalence implementation in MEDFileMesh"""
4772 fileName="Pyfile97.med"
4775 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)])
4776 coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4777 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])
4778 m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4779 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])
4780 m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4781 mm.getFamilyFieldAtLevel(-1)[:]=-2
4782 mm.getFamilyFieldAtLevel(0)[:]=0
4783 mm.addFamily("HOMARD________-1",-1)
4784 mm.addFamily("HOMARD________-2",-2)
4785 mm.addFamily("HOMARD________-3",-3)
4786 mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4788 eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4789 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."
4790 mm.initializeEquivalences()
4791 eqs=mm.getEquivalences()
4792 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4793 eq0.setDescription(descEq)
4794 corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
4795 eq0.setArray(-1,corr)
4796 self.assertEqual(eq0.getCell().size(),1)
4797 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4798 eq0.getCell().clear()
4799 self.assertEqual(eq0.getCell().size(),0)
4800 eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4801 self.assertEqual(eq0.getCell().size(),1)
4802 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4803 mm.killEquivalences()
4804 mm.initializeEquivalences()
4805 eqs=mm.getEquivalences()
4806 eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4807 eq0.setDescription(descEq)
4809 c.setArrayForType(NORM_QUAD4,corr)
4810 self.assertEqual(eq0.getCell().size(),1)
4811 self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4813 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4814 self.assertEqual(mm2.getEquivalences().size(),1)
4815 self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4816 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4817 self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4818 mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4819 self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4820 mm.write(fileName,2)
4822 mm3=MEDFileMesh.New(fileName)
4823 self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4826 def testMEDFileForFamiliesPlayer1(self):
4827 """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4828 fileName="Pyfile98.med"
4830 magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
4831 arr=DataArrayDouble(4) ; arr.iota()
4832 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4833 m=m.buildUnstructured()
4836 mm.setName(meshName)
4837 mm.setFamilyId("FAMILLE_ZERO",0)
4838 mm.getFamilyFieldAtLevel(0)[-3:]=-4
4839 mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
4840 mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
4841 d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
4842 mm.setFamilyFieldArr(1,d)
4843 mm.setFamilyId("RIDF%s"%(magicSt%1),3)
4844 mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
4845 self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4846 self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
4847 self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
4848 mm.write(fileName,2)
4849 # now read such funny file !
4850 mm2=MEDFileMesh.New(fileName) # <- normaly mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
4851 self.assertTrue(mm.isEqual(mm2,1e-16))
4852 self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4853 self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
4854 self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
4857 def testCartesianizer1(self):
4858 """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
4860 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4861 mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
4862 d0=DataArrayInt(16) ; d0[:]=0
4863 d1=DataArrayInt(9) ; d1[:]=0
4864 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4865 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4866 ref0=mm.getCoords().getHiddenCppPointer()
4867 ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
4868 self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
4869 ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
4870 ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
4871 self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4872 mm.setAxisType(AX_CYL) #<- important
4873 mm2=mm.cartesianize() # the trigger
4874 self.assertEqual(mm2.getAxisType(),AX_CART)
4875 mm.setAxisType(AX_CART) # this is here only to avoid complaints
4876 self.assertTrue(isinstance(mm2,MEDFileUMesh))
4877 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4878 self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
4879 self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
4880 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
4881 self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4882 self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
4883 self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
4884 self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
4885 self.assertEqual(mm2.getName(),mm.getName())
4886 self.assertEqual(mm2.getDescription(),mm.getDescription())
4887 self.assertEqual(mm2.getTime(),mm.getTime())
4888 self.assertEqual(mm2.getTime(),mm.getTime())
4889 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4890 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4891 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4892 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4893 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4894 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4895 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4896 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4898 mm.setAxisType(AX_CART)
4899 mm2=mm.cartesianize() # the trigger
4900 self.assertEqual(mm2.getAxisType(),AX_CART)
4901 self.assertTrue(isinstance(mm2,MEDFileUMesh))
4902 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4903 # CurveLinearMesh non cart
4904 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
4905 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4906 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4907 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4908 ref0=mm.getMesh().getCoords().getHiddenCppPointer()
4909 mm2=mm.cartesianize() # the trigger
4910 self.assertEqual(mm2.getAxisType(),AX_CART)
4911 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4912 self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4913 self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4914 self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4915 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4916 self.assertEqual(mm2.getName(),mm.getName())
4917 self.assertEqual(mm2.getDescription(),mm.getDescription())
4918 self.assertEqual(mm2.getTime(),mm.getTime())
4919 self.assertEqual(mm2.getTime(),mm.getTime())
4920 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4921 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4922 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4923 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4924 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4925 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4926 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4927 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4928 # CurveLinearMesh cart
4929 mm.setAxisType(AX_CART)
4930 mm2=mm.cartesianize() # the trigger
4931 self.assertEqual(mm2.getAxisType(),AX_CART)
4932 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4933 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4935 arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4936 mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4937 mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4938 mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4939 mm2=mm.cartesianize() # the trigger
4940 self.assertEqual(mm2.getAxisType(),AX_CART)
4941 self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4942 self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4943 self.assertEqual(mm2.getName(),mm.getName())
4944 self.assertEqual(mm2.getDescription(),mm.getDescription())
4945 self.assertEqual(mm2.getTime(),mm.getTime())
4946 self.assertEqual(mm2.getTime(),mm.getTime())
4947 self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4948 self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4949 self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4950 self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4951 self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4952 self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4953 self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4954 self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4956 mm.setAxisType(AX_CART)
4957 mm2=mm.cartesianize() # the trigger
4958 self.assertEqual(mm2.getAxisType(),AX_CART)
4959 self.assertTrue(isinstance(mm2,MEDFileCMesh))
4960 self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4963 def testCheckCoherency(self):
4964 m2 = MEDCouplingUMesh("2d", 2)
4965 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
4966 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
4967 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
4968 mum = MEDFileUMesh()
4969 mum.setMeshAtLevel(0, m2)
4970 mum.setMeshAtLevel(-1, m1)
4971 mum.checkConsistency()
4972 mum2 = mum.deepCopy()
4975 arr = DataArrayInt([2]*4)
4976 mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
4977 self.assertRaises(InterpKernelException, mum.checkConsistency)
4978 mum=mum2; mum2=mum.deepCopy();
4979 arr = DataArrayInt([2]*4)
4980 mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
4981 self.assertRaises(InterpKernelException, mum.checkConsistency)
4982 mum=mum2; mum2=mum.deepCopy();
4983 mum.setRenumFieldArr(1, DataArrayInt([2]*4))
4984 self.assertRaises(InterpKernelException, mum.checkConsistency)
4985 mum=mum2; mum2=mum.deepCopy();
4986 arr = DataArrayAsciiChar(['tutu x']*4)
4987 mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
4988 self.assertRaises(InterpKernelException, mum.checkConsistency)
4991 mum=mum2; mum2=mum.deepCopy();
4992 arr = DataArrayInt([2]*2)
4993 mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
4994 self.assertRaises(InterpKernelException, mum.checkConsistency)
4995 mum=mum2; mum2=mum.deepCopy();
4996 arr = DataArrayInt([2]*2)
4997 mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
4998 self.assertRaises(InterpKernelException, mum.checkConsistency)
4999 mum=mum2; mum2=mum.deepCopy();
5000 mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5001 self.assertRaises(InterpKernelException, mum.checkConsistency)
5002 mum=mum2; mum2=mum.deepCopy();
5003 arr = DataArrayAsciiChar(['tutu x']*2)
5004 mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5005 self.assertRaises(InterpKernelException, mum.checkConsistency)
5008 mum=mum2; mum2=mum.deepCopy();
5009 arr = DataArrayInt([2]*5)
5010 mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5011 self.assertRaises(InterpKernelException, mum.checkConsistency)
5012 mum=mum2; mum2=mum.deepCopy();
5013 arr = DataArrayInt([2]*5)
5014 mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5015 self.assertRaises(InterpKernelException, mum.checkConsistency)
5016 mum=mum2; mum2=mum.deepCopy();
5017 mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5018 self.assertRaises(InterpKernelException, mum.checkConsistency)
5019 mum=mum2; mum2=mum.deepCopy();
5020 arr = DataArrayAsciiChar(['tutu x']*5)
5021 mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5022 self.assertRaises(InterpKernelException, mum.checkConsistency)
5024 def testCheckSMESHConsistency(self):
5025 m2 = MEDCouplingUMesh("2d", 2)
5026 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5027 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5028 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5029 mum = MEDFileUMesh()
5030 mum.setMeshAtLevel(0, m2)
5031 mum.setMeshAtLevel(-1, m1)
5032 mum.checkConsistency()
5033 mum.checkSMESHConsistency()
5034 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5035 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5036 mum.setRenumFieldArr(0, n2)
5037 mum.setRenumFieldArr(-1, n1)
5038 self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5039 mum.setRenumFieldArr(-1, n1+100)
5040 mum.checkSMESHConsistency()
5043 def testClearNodeAndCellNumbers(self):
5044 m2 = MEDCouplingUMesh("2d", 2)
5045 m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
5046 m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5047 m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5048 mum = MEDFileUMesh()
5049 mum.setMeshAtLevel(0, m2)
5050 mum.setMeshAtLevel(-1, m1)
5051 mum.checkConsistency()
5052 n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5053 n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5054 mum.setRenumFieldArr(0, n2)
5055 mum.setRenumFieldArr(-1, n1)
5056 mum.clearNodeAndCellNumbers()
5057 mum.checkSMESHConsistency()
5060 def testCMeshSetFamilyFieldArrNull(self):
5062 fname="Pyfile99.med"
5063 arrX=DataArrayDouble([0,1,2,3])
5064 arrY=DataArrayDouble([0,1,2])
5065 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5066 mm=MEDFileCMesh() ; mm.setMesh(m)
5067 famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5068 famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5069 mm.setFamilyFieldArr(0,famCellIds)
5070 mm.setFamilyFieldArr(1,famNodeIds)
5072 mm=MEDFileMesh.New(fname)
5073 self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5074 self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5075 mm.setFamilyFieldArr(0,None)#<- bug was here
5076 mm.setFamilyFieldArr(1,None)#<- bug was here
5077 self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5078 self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5080 self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5081 self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5083 mm2=MEDFileMesh.New(fname)
5084 self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5085 self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5088 def testAppendFieldProfileOnIntField(self):
5089 fname="Pyfile100.med"
5090 arrX=DataArrayDouble([0,1,2,3])
5091 arrY=DataArrayDouble([0,1,2])
5092 mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5096 fmts=MEDFileIntFieldMultiTS()
5098 pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5099 f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5100 fieldName="FieldOnCell"
5101 f.setTime(1.2,1,1) ; f.setName(fieldName)
5102 arr=DataArrayInt([101,102,103]) ; f.setArray(arr)
5103 fmts.appendFieldProfile(f,mm,0,pfl)
5108 mm=MEDFileMesh.New(fname)
5109 fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5110 self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5111 self.assertEqual(fmts.getName(),fieldName)
5112 self.assertEqual(len(fmts),1)
5114 ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5115 self.assertEqual(pfltest.getName(),pflName)
5116 self.assertEqual(ftest.getName(),fieldName)
5117 self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5118 ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5119 self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5120 self.assertEqual(ftest2.getTime(),f.getTime())
5121 self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5124 def testMEDFileFieldEasyField1(self):
5125 """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."""
5126 ## Basic test on cells on top level
5127 fname="Pyfile101.med"
5130 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5131 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5133 m.insertNextCell(NORM_TRI3,[0,1,2])
5134 m.insertNextCell(NORM_TRI3,[3,4,5])
5135 m.insertNextCell(NORM_TRI3,[6,7,8])
5136 m.insertNextCell(NORM_TRI3,[9,10,11])
5137 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5138 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5141 arr0=DataArrayDouble([10,11,12,13,100,101])
5142 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5143 f.setName(fieldName) ; f.setTime(2.,6,7)
5145 ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5147 arr2=arr0+1000 ; f.setArray(arr2)
5148 f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5152 mm=MEDFileMesh.New(fname)
5153 f1ts=MEDFileField1TS(fname,fieldName,6,7)
5154 ftst0=f1ts.field(mm)
5155 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5156 f1ts=MEDFileField1TS(fname,fieldName,8,9)
5157 ftst1=f1ts.field(mm)
5158 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5159 fmts=MEDFileFieldMultiTS(fname,fieldName)
5160 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5161 ## Basic test on nodes on top level
5162 f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5163 f2.setName(fieldName)
5165 ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5167 mm=MEDFileMesh.New(fname)
5168 f1ts=MEDFileField1TS(fname,fieldName,23,24)
5169 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5170 fmts=MEDFileFieldMultiTS(fname,fieldName)
5171 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5173 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)
5174 f3.setName(fieldName) ; f3.checkConsistencyLight()
5175 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5177 mm=MEDFileMesh.New(fname)
5178 f1ts=MEDFileField1TS(fname,fieldName,2,3)
5179 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5181 f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5182 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])
5183 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)
5184 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)
5185 f4.checkConsistencyLight()
5186 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5188 mm=MEDFileMesh.New(fname)
5189 f1ts=MEDFileField1TS(fname,fieldName,4,5)
5190 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5193 def testMEDFileFieldEasyField2(self):
5194 """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5195 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."""
5196 ## Basic test on cells on top level
5197 fname="Pyfile102.med"
5200 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5201 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5203 m.insertNextCell(NORM_TRI3,[0,1,2])
5204 m.insertNextCell(NORM_TRI3,[3,4,5])
5205 m.insertNextCell(NORM_TRI3,[6,7,8])
5206 m.insertNextCell(NORM_TRI3,[9,10,11])
5207 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5208 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5211 arr0=DataArrayInt([10,11,12,13,100,101])
5212 f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5213 f.setName(fieldName) ; f.setTime(2.,6,7)
5215 ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5217 arr2=arr0+1000 ; f.setArray(arr2)
5218 f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5222 mm=MEDFileMesh.New(fname)
5223 f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5224 ftst0=f1ts.field(mm)
5225 self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5226 f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5227 ftst1=f1ts.field(mm)
5228 self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5229 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5230 self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5231 ## Basic test on nodes on top level
5232 f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5233 f2.setName(fieldName)
5235 ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5237 mm=MEDFileMesh.New(fname)
5238 f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5239 self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5240 fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5241 self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5243 f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt([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)
5244 f3.setName(fieldName) ; f3.checkConsistencyLight()
5245 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5247 mm=MEDFileMesh.New(fname)
5248 f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5249 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5251 f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5252 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])
5253 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)
5254 arr4=DataArrayInt([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)
5255 f4.checkConsistencyLight()
5256 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5258 mm=MEDFileMesh.New(fname)
5259 f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5260 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5263 def testMEDFileFieldEasyField3(self):
5264 """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."""
5265 fname="Pyfile103.med"
5268 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5269 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5271 m.insertNextCell(NORM_TRI3,[0,1,2])
5272 m.insertNextCell(NORM_TRI3,[3,4,5])
5273 m.insertNextCell(NORM_TRI3,[6,7,8])
5274 m.insertNextCell(NORM_TRI3,[9,10,11])
5275 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5276 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5278 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5280 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5281 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5285 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5286 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5288 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5289 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5290 # here f1 lying on level -1 not 0 check if "field" method detect it !
5291 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5292 f1.setMesh(mm[-1]) # -1 is very important
5294 f1.checkConsistencyLight()
5296 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5298 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5299 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5301 f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5302 f3.setMesh(mm[-1]) # this line is important
5303 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)
5304 f3.setName(fieldName) ; f3.checkConsistencyLight()
5305 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5307 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5308 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5310 f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5311 f4.setMesh(mm[-1]) # this line is important
5312 f4.setName(fieldName)
5313 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])
5314 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)
5315 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)
5316 f4.checkConsistencyLight()
5317 mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5318 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5319 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5322 def testMEDFileFieldEasyField4(self):
5323 """ Same than testMEDFileFieldEasyField3 but with integers"""
5324 fname="Pyfile104.med"
5327 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5328 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5330 m.insertNextCell(NORM_TRI3,[0,1,2])
5331 m.insertNextCell(NORM_TRI3,[3,4,5])
5332 m.insertNextCell(NORM_TRI3,[6,7,8])
5333 m.insertNextCell(NORM_TRI3,[9,10,11])
5334 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5335 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5337 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5339 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5340 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5344 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5345 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5347 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5348 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5349 # here f1 lying on level -1 not 0 check if "field" method detect it !
5350 f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5351 f1.setMesh(mm[-1]) # -1 is very important
5353 f1.checkConsistencyLight()
5355 f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5357 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5358 self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5360 f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5361 f3.setMesh(mm[-1]) # this line is important
5362 arr3=DataArrayInt([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)
5363 f3.setName(fieldName) ; f3.checkConsistencyLight()
5364 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5366 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5367 self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5369 f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5370 f4.setMesh(mm[-1]) # this line is important
5371 f4.setName(fieldName)
5372 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])
5373 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)
5374 arr4=DataArrayInt([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)
5375 f4.checkConsistencyLight()
5376 mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5377 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5378 self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5381 def testMEDFileFieldEasyField5(self):
5382 """More and more difficult now look at how profiles are managed by "field" method."""
5383 fname="Pyfile105.med"
5386 coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5387 m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5389 m.insertNextCell(NORM_TRI3,[0,1,2])
5390 m.insertNextCell(NORM_TRI3,[3,4,5])
5391 m.insertNextCell(NORM_TRI3,[6,7,8])
5392 m.insertNextCell(NORM_TRI3,[9,10,11])
5393 m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5394 m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5397 pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5398 m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5400 arr0=DataArrayDouble([10,11,12,13])
5401 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5402 f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5403 ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5406 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5407 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5408 # more complicated -> multi level
5409 m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5411 m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5412 m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5414 mm2[0]=m0 ; mm2[-1]=m
5416 ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5418 mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5419 self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5422 def testExtractPart1(self):
5423 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)])
5425 m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5426 m0.insertNextCell(NORM_TRI3,[8,4,3])
5427 m0.insertNextCell(NORM_TRI3,[8,9,4])
5428 m0.insertNextCell(NORM_TRI3,[7,13,8])
5429 m0.insertNextCell(NORM_TRI3,[7,12,13])
5430 m0.insertNextCell(NORM_TRI3,[0,6,1])
5431 m0.insertNextCell(NORM_TRI3,[0,5,6])
5432 m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5433 m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5434 m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5435 m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5436 m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5438 m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5439 m1.insertNextCell(NORM_SEG2,[10,5])
5440 m1.insertNextCell(NORM_SEG2,[5,0])
5441 m1.insertNextCell(NORM_SEG2,[0,1])
5442 m1.insertNextCell(NORM_SEG2,[1,2])
5443 m1.insertNextCell(NORM_SEG2,[2,3])
5444 m1.insertNextCell(NORM_SEG2,[3,4])
5445 m1.insertNextCell(NORM_SEG2,[4,9])
5446 m1.insertNextCell(NORM_SEG2,[9,14])
5447 m1.insertNextCell(NORM_SEG2,[14,13])
5448 m1.insertNextCell(NORM_SEG2,[13,12])
5449 m1.insertNextCell(NORM_SEG2,[12,11])
5450 m1.insertNextCell(NORM_SEG2,[11,10])
5452 mm[0]=m0 ; mm[-1]=m1
5453 arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5455 tab[0]=DataArrayInt([0,2,3,4,6,7])
5456 tab[-1]=DataArrayInt([2,3,4,5,9])
5458 self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5462 fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5465 arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5466 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5467 f0.setMesh(m0) ; f0.setName(fname0)
5468 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5469 f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5470 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]))
5471 f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5472 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5473 fmts.pushBackTimeStep(f1ts)
5475 mmOut=mm.extractPart(tab)
5477 fsPart0=fs.extractPart(tab,mm)
5478 self.assertEqual(len(fsPart0),1)
5480 self.assertEqual(len(fmtsP),1)
5482 self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5484 self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5485 self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5487 m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5488 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5489 m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5490 self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5491 self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5493 f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5494 self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5495 self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5496 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5497 self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5498 f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5499 self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5500 self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5501 arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5502 self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5504 f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5505 arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5506 self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5508 fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5509 tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5510 for i,tt in enumerate(tss):
5511 f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5512 myarr=arr0_0+i*1000.
5514 f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5515 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5517 fsPart1=fs.extractPart(tab,mm)
5518 self.assertEqual(len(fsPart1),1)
5520 self.assertEqual(len(fmtsP),len(tss))
5521 for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5522 fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5523 self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5524 arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5525 self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5526 self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5527 self.assertEqual(fPart.getTime(),list(tt))
5533 if __name__ == "__main__":