1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2012 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.
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 *
24 from math import pi,e,sqrt
25 from MEDLoaderDataForTest import MEDLoaderDataForTest
27 class MEDLoaderTest(unittest.TestCase):
28 def testMEDMesh1(self):
29 fileName="Pyfile18.med"
30 mname="ExampleOfMultiDimW"
31 medmesh=MEDFileMesh.New(fileName,mname)
32 self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
33 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
34 m1_0=medmesh.getLevel0Mesh(True)
35 m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
36 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
37 m2_0=medmesh.getLevelM1Mesh(True)
38 m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
39 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
41 def testMEDMesh2(self):
42 fileName="Pyfile10.med"
44 outFileName="MEDFileMesh1.med"
45 medmesh=MEDFileUMesh.New(fileName,mname)
46 self.assertEqual((0,),medmesh.getNonEmptyLevels())
47 m1_0=medmesh.getLevel0Mesh(True)
48 m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
49 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
50 g1_0=medmesh.getGroup(0,"mesh2",True)
51 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
52 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
53 g1_0=medmesh.getGroup(0,"mesh3",True)
54 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
55 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
56 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
57 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
58 g1_1.setName(g1_0.getName())
59 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
60 g1_0=medmesh.getFamily(0,"Family_2",True)
61 g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
62 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
63 g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
64 g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
65 g1_1.setName(g1_0.getName())
66 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
67 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
68 medmesh.write(outFileName,2);
69 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
70 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
71 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
72 self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
73 famn=medmesh.getFamilyNameGivenId(0)
74 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
76 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
77 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
78 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
79 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
80 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
83 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
84 def testMEDMesh3(self):
85 outFileName="MEDFileMesh3.med"
86 c=DataArrayDouble.New()
87 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 ];
88 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
89 c.setValues(coords,9,2)
90 m=MEDCouplingUMesh.New();
91 m.setMeshDimension(2);
93 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
94 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
95 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
96 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
97 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
98 m.finishInsertingCells();
101 m1=MEDCouplingUMesh.New();
102 m1.setMeshDimension(1);
104 m1.insertNextCell(NORM_SEG2,2,[1,4])
105 m1.insertNextCell(NORM_SEG2,2,[3,6])
106 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
107 m1.finishInsertingCells();
110 m2=MEDCouplingUMesh.New();
111 m2.setMeshDimension(0);
113 m2.insertNextCell(NORM_POINT1,1,[1])
114 m2.insertNextCell(NORM_POINT1,1,[3])
115 m2.insertNextCell(NORM_POINT1,1,[2])
116 m2.insertNextCell(NORM_POINT1,1,[6])
117 m2.finishInsertingCells();
121 mm=MEDFileUMesh.New()
122 mm.setName("MyFirstMEDCouplingMEDmesh")
123 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
125 mm.setMeshAtLevel(-1,m1);
126 mm.setMeshAtLevel(0,m);
127 mm.setMeshAtLevel(-2,m2);
128 # playing with groups
129 g1_2=DataArrayInt.New()
130 g1_2.setValues([1,3],2,1)
132 g2_2=DataArrayInt.New()
133 g2_2.setValues([1,2,3],3,1)
135 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
136 g1_1=DataArrayInt.New()
137 g1_1.setValues([0,1,2],3,1)
139 g2_1=DataArrayInt.New()
140 g2_1.setValues([0,2],2,1)
142 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
143 g1_N=DataArrayInt.New()
144 g1_N.setValues(range(8),8,1)
146 g2_N=DataArrayInt.New()
147 g2_N.setValues(range(9),9,1)
149 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
150 mm.createGroupOnAll(0,"GrpOnAllCell")
151 # check content of mm
152 t=mm.getGroupArr(0,"G1",False)
153 self.assertTrue(g1_2.isEqual(t));
154 t=mm.getGroupArr(0,"G2",False)
155 self.assertTrue(g2_2.isEqual(t));
156 t=mm.getGroupArr(-1,"G1",False)
157 self.assertTrue(g1_1.isEqual(t));
158 t=mm.getGroupArr(-1,"G2",False)
159 self.assertTrue(g2_1.isEqual(t));
160 t=mm.getGroupArr(1,"G1",False)
161 self.assertTrue(g1_N.isEqual(t));
162 t=mm.getGroupArr(1,"G2",False)
163 self.assertTrue(g2_N.isEqual(t));
164 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
165 t=mm.getGroupArr(0,"GrpOnAllCell")
166 self.assertTrue(t.getValues()==range(5))
169 self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
170 mmCpy.write(outFileName,2);
172 mm=MEDFileMesh.New(outFileName)
173 mbis=mm.getMeshAtLevel(0)
174 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
175 self.assertTrue(m.isEqual(mbis,1e-12));
177 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
180 # this test is the testMEDMesh3 except that permutation is dealed here
181 def testMEDMesh4(self):
182 outFileName="MEDFileMesh4.med"
183 c=DataArrayDouble.New()
184 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 ];
185 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
186 c.setValues(coords,9,2)
187 c.setInfoOnComponent(0,"abcdef [km]")
188 c.setInfoOnComponent(1,"ghij [MW]")
189 m=MEDCouplingUMesh.New();
190 m.setMeshDimension(2);
192 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
193 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
194 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
195 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
196 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
197 m.finishInsertingCells();
200 m1=MEDCouplingUMesh.New();
201 m1.setMeshDimension(1);
203 m1.insertNextCell(NORM_SEG2,2,[1,4])
204 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
205 m1.insertNextCell(NORM_SEG2,2,[3,6])
206 m1.finishInsertingCells();
209 m2=MEDCouplingUMesh.New();
210 m2.setMeshDimension(0);
212 m2.insertNextCell(NORM_POINT1,1,[1])
213 m2.insertNextCell(NORM_POINT1,1,[3])
214 m2.insertNextCell(NORM_POINT1,1,[2])
215 m2.insertNextCell(NORM_POINT1,1,[6])
216 m2.finishInsertingCells();
220 mm=MEDFileUMesh.New()
221 mm.setName("My2ndMEDCouplingMEDmesh")
222 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
224 renumNode=DataArrayInt.New()
225 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
226 mm.setRenumFieldArr(1,renumNode)
227 mm.setMeshAtLevel(-1,m1,True);
228 mm.setMeshAtLevel(0,m,True);
229 mm.setMeshAtLevel(-2,m2,True);
230 mm.removeMeshAtLevel(-2)
231 mm.setMeshAtLevel(-2,m2,True);
232 # playing with groups
233 g1_2=DataArrayInt.New()
234 g1_2.setValues([2,3],2,1)
236 g2_2=DataArrayInt.New()
237 g2_2.setValues([2,0,3],3,1)
239 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
240 g1_1=DataArrayInt.New()
241 g1_1.setValues([0,2,1],3,1)
243 g2_1=DataArrayInt.New()
244 g2_1.setValues([0,2],2,1)
246 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
247 g1_N=DataArrayInt.New()
248 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
250 g2_N=DataArrayInt.New()
251 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
253 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
254 # check content of mm
255 t=mm.getGroupArr(0,"G1",True)
256 self.assertTrue(g1_2.isEqual(t));
257 t=mm.getGroupArr(0,"G2",True)
258 self.assertTrue(g2_2.isEqual(t));
259 t=mm.getGroupArr(-1,"G1",True)
260 self.assertTrue(g1_1.isEqual(t));
261 t=mm.getGroupArr(-1,"G2",True)
262 self.assertTrue(g2_1.isEqual(t));
263 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
265 mm.write(outFileName,2);
266 mm2=MEDFileMesh.New(outFileName)
267 res=mm.isEqual(mm2,1e-12)
268 self.assertTrue(res[0])
269 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
270 self.assertEqual(['Family_10','Family_11','Family_3','Family_4','Family_7'],l)
271 mm2.keepFamIdsOnlyOnLevs([3],[-1])
272 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
273 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
275 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
276 self.assertEqual(['Family_10','Family_11','Family_12','Family_3','Family_4','Family_7'],l)
278 self.assertEqual([7,7,6],mm2.getFamilyFieldAtLevel(-1).getValues())
279 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,8)
280 self.assertEqual([7,8,6],mm2.getFamilyFieldAtLevel(-1).getValues())
281 self.assertTrue(not mm2.existsFamily("Family_8"))
282 mm2.createGroupOnAll(-1,"GrpOnAllFace")
283 self.assertTrue(mm2.existsFamily("Family_8"))
284 self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
287 #testing persistence of retrieved arrays
288 def testMEDMesh5(self):
289 fileName="Pyfile18.med"
290 mname="ExampleOfMultiDimW"
291 medmesh=MEDFileUMesh.New(fileName,mname)
292 m1_0=medmesh.getLevel0Mesh(True)
293 da1=medmesh.getFamilyFieldAtLevel(0)
295 self.assertEqual(20,m1_0.getNumberOfCells())
296 self.assertEqual(20,da1.getNumberOfTuples())
299 def testMEDMesh6(self):
300 outFileName="MEDFileMesh5.med"
303 m1=MEDCouplingCMesh.New();
304 da=DataArrayDouble.New()
305 da.setValues([0.,1.,2.],3,1)
306 da.setInfoOnComponent(0,"XX [mm]")
308 da=DataArrayDouble.New()
309 da.setValues([0.,1.2],2,1)
310 da.setInfoOnComponent(0,"YY [km]")
312 da=DataArrayDouble.New()
313 da.setValues([0.,1.3],2,1)
314 da.setInfoOnComponent(0,"ZZ [um]")
317 m.setName("myFirstCartMesh")
318 m.setDescription("mmmmpppppppp")
321 da=DataArrayInt.New()
322 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
323 m.setFamilyFieldArr(1,da)
324 m.setFamilyId("family1",1)
325 da=m.getFamilyArr(1,"family1")
327 self.assertEqual(expected1,da.getValues())
328 m.write(outFileName,2);
329 mm=MEDFileMesh.New(outFileName)
330 self.assertTrue(m.isEqual(mm,1e-12)[0])
331 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
334 m1.setTime(tt[2],tt[0],tt[1])
335 m1.setName(m.getName())
336 m1.setTimeUnit(m.getTimeUnit())
337 m1.setDescription(m.getDescription())
338 self.assertTrue(m2.isEqual(m1,1e-12));
341 def testMEDMesh7(self):
342 fileName="Pyfile24.med"
343 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
345 m.setCoords(m2.getCoords())
346 m.setMeshAtLevel(0,m2)
347 m.setMeshAtLevel(-1,m1)
348 m.setMeshAtLevel(-2,m0)
349 m.setFamilyFieldArr(0,f2)
350 m.setFamilyFieldArr(-1,f1)
351 m.setFamilyFieldArr(-2,f0)
352 m.setFamilyFieldArr(1,p)
353 m.setRenumFieldArr(0,n2)
354 m.setRenumFieldArr(-1,n1)
355 m.setRenumFieldArr(-2,n0)
357 for i in xrange(nbOfFams):
358 m.addFamily(fns[i],fids[i])
361 for i in xrange(nbOfGrps):
362 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
364 m.setName(m2.getName())
365 m.setDescription(m2.getDescription())
367 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
368 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
369 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
370 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
371 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
372 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
373 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
374 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
375 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
380 def funcToTestDelItem(self,ff):
384 #emulation of pointe.med file.
385 def testMEDField1(self):
386 mm=MEDFileMesh.New("Pyfile17.med")
387 mm.write("Pyfile17_bis.med",2)
388 ff=MEDFileFieldMultiTS("Pyfile17.med")
389 tsExpected=[[1,2],[3,4],[5,6]]
390 self.assertEqual(3,len(ff))
391 for pos,f1ts in enumerate(ff):
392 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
393 self.assertEqual(type(f1ts),MEDFileField1TS)
395 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
396 self.assertEqual([3,4],ff[1].getTime()[:-1])
397 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
398 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
399 ff.write("Pyfile17_bis.med",0)
401 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
402 self.assertEqual([(1,2),(3,4),(5,6)],ts)
403 self.funcToTestDelItem(ff)
404 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
405 self.assertEqual([(1,2)],ts)
409 def testMEDField2(self):
410 mm=MEDFileMesh.New("Pyfile19.med")
411 mm.write("Pyfile19_bis.med",2)
412 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
413 ff.write("Pyfile19_bis.med",0)
414 self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
418 def testMEDField3(self):
419 mm=MEDFileMesh.New("Pyfile13.med")
420 mm.write("Pyfile13_bis.med",2)
421 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
422 ff.write("Pyfile13_bis.med",0)
423 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
424 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
425 f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
426 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
430 def testMEDField4(self):
431 mm=MEDFileMesh.New("Pyfile14.med")
432 mm.write("Pyfile14_bis.med",2)
433 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
434 ff.write("Pyfile14_bis.med",0)
435 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
436 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
437 f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
438 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
441 # MEDField get/set on pointe.med
442 def testMEDField5(self):
443 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
444 f=ff.getFieldAtLevel(ON_CELLS,0)
445 f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
446 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
447 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
448 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
449 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
450 # no with renumbering
451 f=ff.getFieldAtLevel(ON_CELLS,0,1)
452 f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
453 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
454 f=ff.getFieldAtLevel(ON_CELLS,0,3)
455 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
456 f=ff.getFieldAtLevel(ON_CELLS,0,2)
457 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
458 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
459 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
462 # MEDField get/set on profiles nodes
463 def testMEDField6(self):
464 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
465 its=ff.getIterations()
466 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
467 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
468 f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
469 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
470 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
471 its=ff.getIterations()
472 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
473 f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
474 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
475 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
476 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
479 # MEDField get/set on profiles cells
480 def testMEDField7(self):
481 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
482 its=ff.getIterations()
483 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
484 f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
485 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
488 #first test of assignation. No profile and types sorted by type.
489 def testMEDField8(self):
491 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
493 mm1=MEDFileUMesh.New()
494 mm1.setCoords(m1.getCoords())
495 mm1.setMeshAtLevel(0,m1)
496 mm1.setName(m1.getName())
498 ff1=MEDFileField1TS.New()
499 ff1.setFieldNoProfileSBT(f1)
501 f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
502 itt,orr,ti=ff1.getTime()
503 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
504 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
506 itt,orr,ti=ff1.getTime()
507 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
508 da,infos=ff1.getUndergroundDataArrayExt()
509 f2.getArray().setName(da.getName())#da has the same name than f2
510 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
511 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
514 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
516 mm1=MEDFileUMesh.New()
517 mm1.setCoords(m1.getCoords())
518 mm1.setMeshAtLevel(0,m1)
519 mm1.setName(m1.getName())
521 ff1=MEDFileField1TS.New()
522 ff1.setFieldNoProfileSBT(f1)
524 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
526 f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
527 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
528 f1.getArray().setIJ(0,0,nv)
529 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
532 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
534 mm1=MEDFileUMesh.New()
535 mm1.setCoords(m1.getCoords())
536 mm1.setMeshAtLevel(0,m1)
537 mm1.setName(m1.getName())
539 ff1=MEDFileField1TS.New()
540 ff1.setFieldNoProfileSBT(f1)
542 f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
543 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
544 da,infos=ff1.getUndergroundDataArrayExt()
545 f2.getArray().setName(da.getName())#da has the same name than f2
546 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
547 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
550 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
552 mm1=MEDFileUMesh.New()
553 mm1.setCoords(m1.getCoords())
554 mm1.setMeshAtLevel(0,m1)
555 mm1.setName(m1.getName())
557 ff1=MEDFileField1TS.New()
558 ff1.setFieldNoProfileSBT(f1)
560 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
561 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
562 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
563 sbt=ff2.getFieldSplitedByType2()
564 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
565 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
566 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
567 self.assertEqual(6,loc1.getNumberOfPointsInCells())
568 self.assertEqual(3,loc1.getNumberOfGaussPoints())
569 self.assertEqual(2,loc1.getDimension())
570 da,infos=ff2.getUndergroundDataArrayExt()
571 f2.getArray().setName(da.getName())#da has the same name than f2
572 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
573 self.assertEqual(53,da.getNumberOfTuples())
574 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)
578 def testMEDFileData1(self):
582 m1=MEDLoaderDataForTest.build1DMesh_1()
583 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
584 mmm1=MEDFileMeshMultiTS.New() ;
585 mmm1.setOneTimeStep(mm1)
586 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
587 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
588 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
589 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
591 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
592 self.assertEqual(name,mmm.getName())
593 self.assertEqual(type(mmm),MEDFileUMesh)
595 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
597 ff1=MEDFileFieldMultiTS.New()
598 ff21=MEDFileFieldMultiTS.New()
599 ff22=MEDFileFieldMultiTS.New()
600 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
601 f1.getArray().setInfoOnComponent(0,"power [kW]")
602 ff1.appendFieldNoProfileSBT(f1)
603 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
604 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
605 ff21.appendFieldNoProfileSBT(f21)
606 f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
607 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
608 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
609 ff22.appendFieldNoProfileSBT(f22)
610 fs=MEDFileFields.New()
611 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
612 for name,fmts in zip(["f1","f21","f22"],fs):
613 self.assertEqual(name,fmts.getName())
617 fname2="Pyfile29_2.med"
620 d2=MEDFileData.New(fname2)
621 self.assertEqual(2,d2.getNumberOfMeshes())
622 self.assertEqual(3,d2.getNumberOfFields())
623 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
624 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
625 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
626 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
627 self.assertTrue(m1.isEqual(m1bis,1e-12))
628 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
629 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
630 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
631 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
632 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
635 def testMEDField9(self):
636 # first test field profile WR. Full type but with some type missing
638 m1=MEDLoaderDataForTest.build2DMesh_3()
639 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
641 ff1=MEDFileField1TS.New()
642 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
643 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
644 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.
645 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
647 ff1.setFieldProfile(f1,mm1,0,da)
648 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
652 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
653 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
654 self.assertTrue(vals.isEqual(d,1e-14))
656 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
657 ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
658 ff2.deepCpyGlobs(ff3)
659 sbt=ff2.getFieldSplitedByType2()
660 self.assertEqual(3,sbt[0][0])#TRI3
661 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
662 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
663 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
664 self.assertEqual(4,sbt[1][0])#QUAD4
665 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
666 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
667 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
668 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
669 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
670 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
671 self.assertTrue(vals.isEqual(d,1e-14))
674 def testMEDField10(self):
676 m1=MEDLoaderDataForTest.build2DMesh_1()
677 m1.renumberCells([0,1,4,2,3,5],False)
678 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
680 ff1=MEDFileFieldMultiTS.New()
681 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
682 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
683 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.
684 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
686 ff1.appendFieldProfile(f1,mm1,0,da)
687 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
688 ff1.appendFieldProfile(f1,mm1,0,da)
692 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
693 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
694 self.assertTrue(vals.isEqual(e,1e-14))
695 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
696 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
697 self.assertTrue(vals.isEqual(d,1e-14))
699 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
700 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
701 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
702 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
703 self.assertTrue(vals.isEqual(e,1e-14))
704 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
705 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
706 self.assertTrue(vals.isEqual(d,1e-14))
709 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
710 def testMEDField11(self):
712 m1=MEDLoaderDataForTest.build2DMesh_1()
713 m1.renumberCells([0,1,4,2,3,5],False)
714 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
716 ff1=MEDFileField1TS.New()
717 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
718 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
719 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.
720 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
722 ff1.setFieldProfile(f1,mm1,0,da)
723 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
726 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
727 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
728 self.assertTrue(vals.isEqual(d,1e-14))
730 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
731 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
732 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
733 self.assertTrue(vals.isEqual(d,1e-14))
736 def testMEDField12(self):
738 m1=MEDLoaderDataForTest.build2DMesh_1()
739 m1.renumberCells([0,1,4,2,3,5],False)
740 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
742 ff1=MEDFileFieldMultiTS.New()
743 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
744 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
745 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.
746 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
748 ff1.appendFieldProfile(f1,mm1,0,da)
749 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
750 ff1.appendFieldProfile(f1,mm1,0,da)
753 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
754 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
755 self.assertTrue(vals.isEqual(e,1e-14))
756 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
757 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
758 self.assertTrue(vals.isEqual(d,1e-14))
760 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
761 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
762 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
763 self.assertTrue(vals.isEqual(e,1e-14))
764 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
765 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
766 self.assertTrue(vals.isEqual(d,1e-14))
769 def testMEDField13(self):
771 m1=MEDLoaderDataForTest.build2DMesh_1()
772 m1.renumberCells([0,1,4,2,3,5],False)
774 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
775 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
777 ff1=MEDFileField1TS.New()
778 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
779 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
780 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.
781 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
783 ff1.setFieldProfile(f1,mm1,0,da)
786 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
787 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
788 self.assertTrue(vals.isEqual(d,1e-14))
790 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
791 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
792 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
793 self.assertTrue(vals.isEqual(d,1e-14))
796 def testMEDField14(self):
798 m1=MEDLoaderDataForTest.build2DMesh_1()
799 m1.renumberCells([0,1,4,2,3,5],False)
801 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
802 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
804 ff1=MEDFileFieldMultiTS.New()
805 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
806 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
807 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.
808 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
810 ff1.appendFieldProfile(f1,mm1,0,da)
811 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
812 ff1.appendFieldProfile(f1,mm1,0,da)
815 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
816 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
817 self.assertTrue(vals.isEqual(d,1e-14))
818 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
819 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
820 self.assertTrue(vals.isEqual(e,1e-14))
821 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
823 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
824 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
825 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
826 self.assertTrue(vals.isEqual(d,1e-14))
827 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
828 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
829 self.assertTrue(vals.isEqual(e,1e-14))
831 # 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.
832 # 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
833 # 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 !
834 def testMEDField15(self):
836 m0=MEDLoaderDataForTest.build2DMesh_1()
837 m0.renumberCells([0,1,4,2,3,5],False)
839 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
840 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
841 ff1=MEDFileField1TS.New()
842 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
843 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
844 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.
845 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
847 ff1.setFieldProfile(f1,mm1,0,da)
848 m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
851 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
852 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
853 self.assertTrue(p1.isIdentity())
854 self.assertEqual(5,p1.getNumberOfTuples())
855 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
857 # Test for getFieldAtTopLevel method
858 def testMEDField16(self):
860 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
862 mm1=MEDFileUMesh.New()
863 mm1.setCoords(m1.getCoords())
864 mm1.setMeshAtLevel(0,m1)
865 mm1.setName(m1.getName())
866 ff1=MEDFileField1TS.New()
867 ff1.setFieldNoProfileSBT(f1)
868 m2=m1.buildDescendingConnectivity()[0]
869 m2.sortCellsInMEDFileFrmt()
870 m2.setName(m1.getName())
871 mm1.setMeshAtLevel(-1,m2)
873 f2=m2.getMeasureField(True)
874 dd=DataArrayDouble.New()
875 dd.alloc(f2.getArray().getNumberOfTuples(),3)
876 dd[:,0]=f2.getArray()
877 dd[:,1]=2*f2.getArray()
878 dd[:,2]=3*f2.getArray()
879 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
881 f2.copyTinyStringsFrom(f1)
882 f2.copyTinyAttrFrom(f1)
883 ff1.setFieldNoProfileSBT(f2)
885 # Reading Pyfile37.med
886 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
887 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
888 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
889 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
890 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
891 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
892 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
896 ff1=MEDFileField1TS.New()
897 ff1.setFieldNoProfileSBT(f2)
899 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
900 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
901 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
904 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
905 def testMEDField17(self):
907 m1=MEDLoaderDataForTest.build2DMesh_1()
908 m1.renumberCells([0,1,4,2,3,5],False)
909 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
911 ffs=MEDFileFields.New()
912 ff1=MEDFileFieldMultiTS.New()
913 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
914 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
915 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.
916 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
918 ff1.appendFieldProfile(f1,mm1,0,da)
919 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
920 ff1.appendFieldProfile(f1,mm1,0,da)
922 ffs.setFieldAtPos(0,ff1)
926 ffsr=MEDFileFields.New(fname)
927 ff3=ffsr.getFieldAtPos(0)
928 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
929 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
932 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
933 def testMEDField18(self):
935 m1=MEDLoaderDataForTest.build2DMesh_1()
936 m1.renumberCells([0,1,4,2,3,5],False)
937 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
939 ffs=MEDFileFields.New()
940 ff1=MEDFileFieldMultiTS.New()
941 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
942 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
943 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.
944 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
946 ff1.appendFieldProfile(f1,mm1,0,da)
947 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
948 ff1.appendFieldProfile(f1,mm1,0,da)
952 ffsr=MEDFileFields.New(fname)
953 ff3=ffsr.getFieldAtPos(0)
954 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
955 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
958 def testMEDFieldBug1(self):
960 d=MEDFileData.New(fname)
961 self.assertEqual(('GP_MyFirstFieldOnGaussPoint0', 'GP_MyFirstFieldOnGaussPoint1', 'GP_MyFirstFieldOnGaussPoint2'),d.getFields().getFieldAtPos(0).getLocs())
964 def testMEDMesh8(self):
965 m=MEDLoaderDataForTest.build1DMesh_1()
966 m.convertQuadraticCellsToLinear()
967 mm=MEDFileUMesh.New()
968 mm.setMeshAtLevel(0,m)
969 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
970 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
971 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
972 mm.setGroupsAtLevel(0,[g1,g2],False)
973 self.assertEqual(('g1','g2'),mm.getGroupsNames())
974 self.assertEqual(('Family_2','Family_3'),mm.getFamiliesNames())
975 self.assertEqual(('Family_2',),mm.getFamiliesOnGroup('g1'))
976 self.assertEqual(('Family_3',),mm.getFamiliesOnGroup('g2'))
977 mm.assignFamilyNameWithGroupName()
978 self.assertEqual(('g1','g2'),mm.getGroupsNames())
979 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
980 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
981 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
983 mm=MEDFileUMesh.New()
984 mm.setMeshAtLevel(0,m)
985 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
986 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
987 self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
988 self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
989 self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
990 self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
991 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
992 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
993 self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
994 self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
995 self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
996 self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
997 mm.changeFamilyId(5,6)
998 g=mm.getGroupArr(0,"g3")
999 self.assertTrue(g.isEqual(g3));
1000 g=mm.getGroupArr(0,"g2")
1001 self.assertTrue(g.isEqual(g2));
1002 g=mm.getGroupArr(0,"g1")
1003 self.assertTrue(g.isEqual(g1));
1006 # bug detected by gauthier
1007 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1008 fname="Pyfile41.med"
1009 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1011 mm1=MEDFileUMesh.New()
1012 mm1.setCoords(m1.getCoords())
1013 mm1.setMeshAtLevel(0,m1)
1015 ff1=MEDFileField1TS.New()
1016 ff1.setFieldNoProfileSBT(f1)
1018 # writing mesh1 and field1, now creation of mesh2 and field2
1021 m2.translate([0.5,0.6,0.7])
1022 m2.setName("3DSurfMesh_2")
1023 f2.getArray()[:]*=2.
1024 f2.setName("VectorFieldOnCells2")
1025 mm2=MEDFileUMesh.New()
1026 mm2.setCoords(m2.getCoords())
1027 mm2.setMeshAtLevel(0,m2)
1029 ff2=MEDFileField1TS.New()
1030 ff2.setFieldNoProfileSBT(f2)
1033 f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1034 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1035 f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1036 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1039 def testMEDLoaderMultiLevelCellField1(self):
1040 fname="Pyfile42.med"
1041 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1042 m=MEDFileUMesh.New()
1043 m.setCoords(m2.getCoords())
1044 m.setMeshAtLevel(0,m2)
1045 m.setMeshAtLevel(-1,m1)
1046 m.setMeshAtLevel(-2,m0)
1050 compNames1=["comp1","comp2","comp3"]
1051 ff1=MEDFileField1TS.New()
1052 da2=DataArrayDouble.New()
1053 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1055 da2.rearrange(len(compNames1))
1056 da2.setInfoOnComponents(compNames1)
1057 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1058 ff1.setFieldNoProfileSBT(f2)
1059 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1060 da0=DataArrayDouble.New()
1061 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1063 da0.rearrange(len(compNames1))
1064 da0.setInfoOnComponents(compNames1)
1065 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1066 ff1.setFieldNoProfileSBT(f0)
1067 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1068 da1=DataArrayDouble.New()
1069 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1071 da1.rearrange(len(compNames1))
1072 da1.setInfoOnComponents(compNames1)
1073 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1074 ff1.setFieldNoProfileSBT(f1)
1075 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1080 compNames2=["comp11","comp22"]
1081 ff2=MEDFileField1TS.New()
1082 da0=DataArrayDouble.New()
1083 da0.alloc(m0.getNumberOfCells()*2,1)
1086 da0.setInfoOnComponents(compNames2)
1087 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1088 ff2.setFieldNoProfileSBT(f0)
1089 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1090 da1=DataArrayDouble.New()
1091 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1093 da1.rearrange(len(compNames2))
1094 da1.setInfoOnComponents(compNames2)
1095 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1096 ff2.setFieldNoProfileSBT(f1)
1097 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1101 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1102 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1103 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1104 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1105 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1106 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1109 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1110 fname="Pyfile43.med"
1111 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1112 m=MEDFileUMesh.New()
1113 m.setMeshAtLevel(0,m2)
1114 m.setMeshAtLevel(-1,m1)
1115 m.setMeshAtLevel(-2,m0)
1116 f=MEDFileField1TS.New()
1117 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1118 ff.setName("NodeFieldPfl")
1119 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1121 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1122 f.setFieldProfile(ff,m,-2,pfl)
1123 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1124 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1125 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1126 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1127 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1128 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1129 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1130 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1131 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1132 expected1=[1.,10.,100.,2.,20.,200.]
1133 nodeCoordsWithValue1=[10.,2.5,0.]
1134 nodeCoordsWithValue2=[10.,3.75,0.]
1136 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1137 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1140 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1144 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1145 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1146 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1147 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1148 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1149 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1150 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1151 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1152 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1154 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1159 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1160 f=MEDFileField1TS.New()
1161 f.setFieldProfile(ff,m,-2,pfl)
1162 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1163 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1164 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1165 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1166 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1167 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1168 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1169 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1170 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1171 expected2=[2.,20.,200.,1.,10.,100.]
1173 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1174 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1177 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1180 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1181 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1182 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1183 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1184 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1185 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1186 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1187 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1188 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1190 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1194 def testDuplicateNodesOnM1Group1(self):
1195 fname="Pyfile44.med"
1196 m=MEDCouplingCMesh.New()
1197 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1198 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1199 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1200 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1201 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1202 m2.setName(m.getName())
1203 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1204 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1205 mm=MEDFileUMesh.New()
1206 mm.setMeshAtLevel(0,m)
1207 mm.setMeshAtLevel(-1,m2)
1208 mm.setGroupsAtLevel(-1,[grp,grp2])
1209 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1210 mm.setGroupsAtLevel(1,[grpNode])
1211 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1212 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1213 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1215 self.assertEqual(30,mm.getNumberOfNodes())
1216 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1217 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1219 nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1220 self.assertEqual([15,16,17],nodes.getValues());
1221 self.assertEqual([7,8,9],cells.getValues());
1222 self.assertEqual([12,13,14],cells2.getValues());
1223 self.assertEqual(33,mm.getNumberOfNodes())
1224 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1225 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1226 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1227 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1228 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
1229 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1230 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
1231 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1232 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])
1233 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1234 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1236 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1237 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1238 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1239 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1240 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1244 def testDuplicateNodesOnM1Group2(self):
1245 fname="Pyfile45.med"
1246 m=MEDCouplingCMesh.New()
1247 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1248 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1249 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1250 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1251 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1252 m2.setName(m.getName())
1253 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1254 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1255 mm=MEDFileUMesh.New()
1256 mm.setMeshAtLevel(0,m)
1257 mm.setMeshAtLevel(-1,m2)
1258 mm.setGroupsAtLevel(-1,[grp,grp2])
1259 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1260 mm.setGroupsAtLevel(1,[grpNode])
1261 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1262 ref1=[4,9,8,14,15,4,10,9,15,16]
1263 ref2=[4,9,8,14,30,4,10,9,30,16]
1265 self.assertEqual(30,mm.getNumberOfNodes())
1266 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1267 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1269 nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1270 self.assertEqual([15],nodes.getValues());
1271 self.assertEqual([7,8],cells.getValues());
1272 self.assertEqual([12,13],cells2.getValues());
1273 self.assertEqual(31,mm.getNumberOfNodes())
1274 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1275 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1276 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1277 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1278 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
1279 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1280 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
1281 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1282 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])
1283 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1284 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1286 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1287 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1288 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1289 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1290 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1294 def testBasicConstructors(self):
1295 fname="Pyfile18.med"
1296 m=MEDFileMesh(fname)
1297 m=MEDFileMesh(fname,"ExampleOfMultiDimW",-1,-1)
1298 m=MEDFileMesh(fname)
1299 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1300 m=MEDFileUMesh(fname)
1303 m=MEDFileCMesh("MEDFileMesh5.med")
1304 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1306 m=MEDFileMeshMultiTS()
1307 m=MEDFileMeshMultiTS(fname)
1308 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1310 m=MEDFileMeshes(fname)
1312 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1313 m=MEDFileFieldMultiTS()
1314 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1316 m=MEDFileFields(fname)
1318 m=MEDFileData(fname)
1320 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1321 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1322 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1323 m=MEDCouplingCMesh()
1324 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1325 m=MEDCouplingFieldTemplate(ON_NODES)
1326 m=MEDCouplingMultiFields([])
1327 m=MEDCouplingFieldOverTime([])
1330 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1331 def testBugSemiPartialField(self):
1332 fname="Pyfile46.med"
1333 m=MEDLoaderDataForTest.build2DMesh_3()
1334 m=m[:10] ; m.setName("mesh")
1335 f=m.getMeasureField(ON_CELLS)
1336 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1338 f.setName("SemiPartialField")
1340 f1=f[:6] ; f1.getMesh().setName(m.getName())
1341 f2=f[6:] ; f2.getMesh().setName(m.getName())
1343 mm=MEDFileUMesh.New()
1344 mm.setMeshAtLevel(0,m)
1345 ff=MEDFileField1TS.New()
1346 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1350 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1351 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1352 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1354 fread.checkCoherency()
1355 fread2.checkCoherency()
1356 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1357 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1360 def testUnPolyze1(self):
1361 fname="Pyfile47.med"
1362 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1363 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]
1364 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1365 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]]))
1367 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1368 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1369 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1370 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1371 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1372 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1373 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1374 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1376 mm.setRenumFieldArr(0,None)
1377 mm.setFamilyFieldArr(-1,None)
1380 def testUnPolyze2(self):
1381 fname="Pyfile48.med"
1382 mfd=MEDFileData.New()
1383 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1384 meshes=MEDFileMeshes.New()
1386 mfd.setMeshes(meshes)
1387 fields=MEDFileFields.New()
1388 mfd.setFields(fields)
1389 ff=MEDFileFieldMultiTS.New()
1390 fields.pushField(ff)
1392 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1393 f0_0.setTime(9.5,3,4)
1394 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1396 f0_0.setMesh(mm.getMeshAtLevel(0))
1397 ff.appendFieldNoProfileSBT(f0_0)
1398 ff0=ff.getTimeStepAtPos(0)
1399 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1400 f0_1.setTime(9.5,3,4)
1401 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1402 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1403 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1405 ff0.setFieldProfile(f0_1,mm,0,pfl)
1406 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1407 f0_2.setTime(9.5,3,4)
1408 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1409 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
1410 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1412 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1413 mfd.getFields().shallowCpyGlobs(ff0)
1415 mfd.unPolyzeMeshes()
1417 fmts=mfd.getFields()[0]
1418 self.assertEqual(fmts.getNumberOfTS(),1)
1419 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1420 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1421 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))])
1422 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1423 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1424 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1425 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1426 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1427 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1428 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1429 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))
1430 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1431 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1432 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1433 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1434 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1435 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])
1436 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1437 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1438 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1439 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])
1440 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1445 def testGaussWriteOnPfl1(self):
1446 fname="Pyfile49.med"
1447 fname2="Pyfile50.med"
1448 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1449 mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1450 mQ8.allocateCells(1)
1451 mQ8.insertNextCell(NORM_QUAD8,range(8))
1452 mQ8.finishInsertingCells()
1453 mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1454 mQ4.allocateCells(1)
1455 mQ4.insertNextCell(NORM_QUAD4,range(4))
1456 mQ4.finishInsertingCells()
1457 mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1458 mT3.allocateCells(1)
1459 mT3.insertNextCell(NORM_TRI3,range(3))
1460 mT3.finishInsertingCells()
1462 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.]]
1463 ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1464 ms[:]=(elt.deepCpy() for elt in ms)
1465 for m,t in zip(ms,tr):
1466 d=m.getCoords() ; d+= t
1468 m=MEDCouplingUMesh.MergeUMeshes(ms)
1470 m2=m[:13] ; m2.setName(m.getName())
1471 ### 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.
1472 ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1473 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1476 da=DataArrayDouble(34) ; da.iota(3.)
1478 f.setName("fieldCellOnPflWithoutPfl")
1479 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])
1480 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])
1481 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])
1485 mm.setMeshAtLevel(0,m)
1488 f1ts=MEDFileField1TS.New()
1489 pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1490 f1ts.setFieldProfile(f,mm,0,pfl)
1493 self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1494 self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1495 da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1496 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1497 da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1498 self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1499 self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1500 self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1502 dataRead=MEDFileData.New(fname)
1503 mRead=dataRead.getMeshes()[0]
1504 f1tsRead=dataRead.getFields()[0][0]
1505 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1506 f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1507 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1508 f2_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1509 f2_bis.checkCoherency()
1510 self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1512 MEDLoader.WriteField(fname2,f,True)
1513 f2_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1514 self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1515 ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1516 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1517 pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1518 m2=m[pfl] ; m2.setName(m.getName())
1521 da=DataArrayDouble(35) ; da.iota(3.)
1523 f.setName("fieldCellOnPflWithoutPfl2")
1524 f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1525 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])
1526 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])
1530 mm.setMeshAtLevel(0,m)
1532 f1ts=MEDFileField1TS.New()
1533 f1ts.setFieldProfile(f,mm,0,pfl)
1534 self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1535 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1536 self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1537 self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1539 dataRead=MEDFileData.New(fname)
1540 mRead=dataRead.getMeshes()[0]
1541 f1tsRead=dataRead.getFields()[0][0]
1542 f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1543 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1544 f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1545 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1546 f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1547 f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1548 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1550 MEDLoader.WriteField(fname2,f,True)
1551 f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1552 f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1553 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1554 ## Use case 3 : no pfl but creation of pfls due to gauss pts
1555 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1558 da=DataArrayDouble(60) ; da.iota(3.)
1560 f.setName("fieldCellWithoutPfl")
1561 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])
1562 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])
1563 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])
1564 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])
1565 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])
1568 mm.setMeshAtLevel(0,m)
1569 f1ts=MEDFileField1TS.New()
1570 f1ts.setFieldNoProfileSBT(f)
1571 self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1572 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1573 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1574 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1575 self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1579 dataRead=MEDFileData.New(fname)
1580 mRead=dataRead.getMeshes()[0]
1581 f1tsRead=dataRead.getFields()[0][0]
1582 f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1583 f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1584 self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1585 f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1586 f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1587 self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1589 MEDLoader.WriteField(fname2,f,True)
1590 f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1591 f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1592 self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1595 # Testing profile on nodes when the profile is identity but not on all nodes.
1596 def testMEDFieldPflOnNode1(self):
1597 fname="Pyfile51.med"
1598 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)
1599 m0=MEDCouplingUMesh("Mesh",2)
1601 m0.insertNextCell(NORM_TRI3,[1,4,2])
1602 m0.insertNextCell(NORM_TRI3,[4,5,2])
1603 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1604 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1605 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1606 m0.finishInsertingCells()
1608 m1=MEDCouplingUMesh(m0.getName(),1)
1610 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1612 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1614 m1.finishInsertingCells()
1618 m.setMeshAtLevel(0,m0)
1619 m.setMeshAtLevel(-1,m1)
1621 dt=3 ; it=2 ; tim=4.5
1622 fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1623 fieldNode0.setName("fieldNode0")
1624 fieldNode0.setTime(tim,dt,it)
1625 pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1626 arr=DataArrayDouble([10,11,12,13,14])
1627 fieldNode0.setArray(arr)
1628 f0=MEDFileField1TS()
1629 f0.setFieldProfile(fieldNode0,m,0,pfl0)
1630 m.write(fname,2) ; f0.write(fname,0)
1631 fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1632 fieldNode1.setName("fieldNode1")
1633 fieldNode1.setTime(tim,dt,it)
1634 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1635 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1636 fieldNode1.setArray(arr1)
1637 f1=MEDFileField1TS()
1638 f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1641 ## Reading from file
1642 m=MEDFileMesh.New(fname)
1643 m0=m.getMeshAtLevel(0)
1644 m00=m0.deepCpy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1645 fieldNode0.setMesh(m00)
1646 f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1647 ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1648 ff0_1.checkCoherency()
1649 self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1650 ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1651 ff0_2.checkCoherency()
1652 self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1653 ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1654 ff0_3.checkCoherency()
1655 self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1656 ff0_4=MEDLoader.ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1657 ff0_4.checkCoherency()
1658 self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1659 f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1660 m1=m.getMeshAtLevel(-1)
1661 m10=m1.deepCpy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1662 fieldNode1.setMesh(m10)
1663 ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1664 ff1_1.checkCoherency()
1665 self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1666 ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1667 ff1_2.checkCoherency()
1668 self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1669 ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1670 ff1_3.checkCoherency()
1671 self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1672 ff1_4=MEDLoader.ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1673 ff1_4.checkCoherency()
1674 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1675 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]
1676 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]
1677 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]
1678 arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1679 arr_r.setName(fieldNode1.getArray().getName())
1680 self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1681 pfl1_r.setName(pfl1.getName())
1682 self.assertTrue(pfl1_r.isEqual(pfl1))
1685 # Testing profile on nodes when the profile is identity but not on all nodes.
1686 def testMEDFieldPflOnCell1(self):
1687 fname="Pyfile52.med"
1688 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)
1689 m0=MEDCouplingUMesh("Mesh",2)
1691 m0.insertNextCell(NORM_TRI3,[1,4,2])
1692 m0.insertNextCell(NORM_TRI3,[4,5,2])
1693 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1694 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1695 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1696 m0.finishInsertingCells()
1698 m1=MEDCouplingUMesh(m0.getName(),1)
1700 conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1702 m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1704 m1.finishInsertingCells()
1708 m.setMeshAtLevel(0,m0)
1709 m.setMeshAtLevel(-1,m1)
1711 dt=3 ; it=2 ; tim=4.5
1712 fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1713 fieldCell0.setName("fieldCell0")
1714 fieldCell0.setTime(tim,dt,it)
1715 pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1716 arr=DataArrayDouble([10,11,12])
1717 fieldCell0.setArray(arr)
1718 f0=MEDFileField1TS()
1719 f0.setFieldProfile(fieldCell0,m,0,pfl0)
1720 m.write(fname,2) ; f0.write(fname,0)
1721 fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1722 fieldCell1.setName("fieldCell1")
1723 fieldCell1.setTime(tim,dt,it)
1724 pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1725 arr1=DataArrayDouble([20,21,22,23,24,25,26])
1726 fieldCell1.setArray(arr1)
1727 f1=MEDFileField1TS()
1728 f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1731 ## Reading from file
1732 m=MEDFileMesh.New(fname)
1733 m0=m.getMeshAtLevel(0)
1734 m00=m0.deepCpy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1735 fieldCell0.setMesh(m00)
1736 f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1737 ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1738 ff0_1.checkCoherency()
1739 self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1740 ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1741 ff0_2.checkCoherency()
1742 self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1743 ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1744 ff0_3.checkCoherency()
1745 self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1746 ff0_4=MEDLoader.ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1747 ff0_4.checkCoherency()
1748 self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1749 f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1750 m1=m.getMeshAtLevel(-1)
1751 m10=m1.deepCpy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1752 fieldCell1.setMesh(m10)
1753 ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1754 ff1_1.checkCoherency()
1755 self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1756 ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1757 ff1_2.checkCoherency()
1758 self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1759 ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1760 ff1_3.checkCoherency()
1761 self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1762 ff1_4=MEDLoader.ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1763 ff1_4.checkCoherency()
1764 self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1765 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]
1766 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]
1767 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]
1768 arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1769 arr_r.setName(fieldCell1.getArray().getName())
1770 self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1771 pfl1_r.setName(pfl1.getName())
1772 self.assertTrue(pfl1_r.isEqual(pfl1))
1775 def testMEDFileUMeshZipCoords1(self):
1777 coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1778 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])
1779 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1780 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1781 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1782 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1783 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1784 numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1785 famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1786 da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1787 da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1788 da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1790 self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1791 self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1792 self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1793 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1794 self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1795 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1796 self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1797 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1798 self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1801 def testMEDUMeshAddNodeGroup1(self):
1802 fname="Pyfile53.med"
1804 coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1805 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])
1806 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1807 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1808 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1809 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1810 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1813 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
1814 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
1815 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1816 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1817 mm.setFamilyId("MyFam",2)
1818 mm.setFamilyId("MyOtherFam",3)
1819 mm.setFamilyId("MyOther-1",-1)
1820 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1821 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1823 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1824 mm.addNodeGroup(daTest)
1825 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1826 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1827 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1828 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1830 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1831 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1832 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1833 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1834 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1835 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1837 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1838 da=DataArrayInt([3,12]) ; da.setName("grp0")
1839 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1841 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1843 mm=MEDFileMesh.New(fname)
1844 self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1845 self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1846 for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1847 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1849 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1850 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1851 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1852 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1853 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1854 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1856 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1857 da=DataArrayInt([3,12]) ; da.setName("grp0")
1858 self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1860 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1863 def testMEDUMeshAddGroup1(self):
1864 fname="Pyfile54.med"
1866 coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1867 m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
1869 m0.insertNextCell(NORM_TRI3,[1,2,1])
1872 m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
1875 m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
1877 m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1878 m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1879 m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1880 m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1881 m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1884 famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
1885 da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
1886 da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1887 da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1888 mm.setFamilyId("MyFam",2)
1889 mm.setFamilyId("MyOtherFam",3)
1890 mm.setFamilyId("MyOther-1",-1)
1891 mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1892 mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1894 daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1895 mm.addGroup(0,daTest)
1896 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1897 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1898 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1899 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1901 self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1902 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1903 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1904 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1905 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1906 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1908 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1909 da=DataArrayInt([3,12]) ; da.setName("grp0")
1910 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1912 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1914 mm=MEDFileMesh.New(fname)
1915 self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1916 self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1917 for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1918 self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1920 self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1921 self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1922 self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1923 self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1924 for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1925 self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1927 self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1928 da=DataArrayInt([3,12]) ; da.setName("grp0")
1929 self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1931 self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1934 def testHeapMem1(self):
1936 ver=platform.python_version_tuple()
1937 if int(ver[0])!=2 or int(ver[1])<7:
1939 m=MEDCouplingCMesh()
1940 arr=DataArrayDouble(10,1) ; arr.iota(0)
1941 m.setCoords(arr,arr)
1942 m=m.buildUnstructured()
1944 f=m.getMeasureField(ON_CELLS)
1945 self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100))
1946 self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100))
1949 mm.setMeshAtLevel(0,m)
1950 self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100))
1951 ff=MEDFileField1TS()
1952 ff.setFieldNoProfileSBT(f)
1953 self.assertIn(ff.getHeapMemorySize(),xrange(711-10,711+10))
1955 fff=MEDFileFieldMultiTS()
1956 fff.appendFieldNoProfileSBT(f)
1957 self.assertIn(fff.getHeapMemorySize(),xrange(743-10,743+10))
1958 self.assertIn(fff[-1,-1].getHeapMemorySize(),xrange(711-10,711+10))
1960 fff.appendFieldNoProfileSBT(f)
1961 self.assertIn(fff.getHeapMemorySize(),xrange(1462-10,1462+10))
1962 self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(711-10,711+10))
1965 pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
1966 fff.appendFieldProfile(f2,mm,0,pfl)
1967 self.assertIn(fff.getHeapMemorySize(),xrange(2178-100,2178+100))
1968 self.assertIn(fff.getProfile("pfl_NORM_QUAD4").getHeapMemorySize(),xrange(215-10,215+10))
1969 self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(700-10,700+10))
1972 def testCurveLinearMesh1(self):
1973 fname="Pyfile55.med"
1974 mesh=MEDCouplingCurveLinearMesh();
1975 mesh.setTime(2.3,4,5);
1976 mesh.setTimeUnit("us");
1977 mesh.setName("Example of Cuve linear mesh");
1978 mesh.setDescription("buildCLMesh");
1979 a1=DataArrayDouble(3*20,1);
1980 a1.iota(7.) ; a1.rearrange(3);
1982 mesh.setNodeGridStructure([4,5]);
1983 mesh.checkCoherency();
1985 m=MEDFileCurveLinearMesh()
1987 d=DataArrayInt(20) ; d.iota(4)
1988 m.setFamilyFieldArr(1,d)
1989 d3=DataArrayInt(20) ; d3.iota(400)
1990 m.setRenumFieldArr(1,d3)
1991 d2=DataArrayInt(12) ; d2.iota(40)
1992 m.setFamilyFieldArr(0,d2)
1993 d4=DataArrayInt(21) ; d4.iota(4000)
1994 self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
1996 m.setRenumFieldArr(1,d4)
1999 m1=MEDFileCurveLinearMesh(fname)
2001 self.assertTrue(mm.isEqual(mesh,1e-12))
2003 m1=MEDFileMesh.New(fname)
2004 self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2005 self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2008 def testParameters1(self):
2009 fname="Pyfile56.med"
2010 m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2011 mm=MEDFileCMesh() ; mm.setMesh(m)
2012 ms=MEDFileMeshes() ; ms.pushMesh(mm)
2014 p=MEDFileParameters()
2015 data.setParams(p) ; data.setMeshes(ms)
2016 pts=MEDFileParameterMultiTS()
2017 pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2018 pts.appendValue(1,2,3.4,567.89)
2019 pts.appendValue(2,3,5.6,999.123)
2020 pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2021 p.pushParam(pts) ; p.pushParam(pts2)
2023 p2=MEDFileParameters(fname)
2024 self.assertTrue(p.isEqual(p2,1e-14)[0])
2025 self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2029 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2030 pts2.eraseTimeStepIds([0])
2031 self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2033 self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2034 self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2035 self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2036 self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2037 self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2039 self.assertTrue(p.isEqual(p2,1e-14)[0])
2040 self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2041 self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2042 self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2043 self.assertEqual(p.getParamsNames(),('A','B'))
2044 ptsr=MEDFileParameterMultiTS(fname,"B")
2045 self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2046 ptsr=MEDFileParameterMultiTS(fname)
2047 self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2048 p1tsr=MEDFileParameterDouble1TS(fname)
2049 self.assertEqual(p1tsr.getName(),"A")
2050 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2051 p1tsr=MEDFileParameterDouble1TS(fname,"B")
2052 self.assertEqual(p1tsr.getName(),"B")
2053 self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2054 p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2055 self.assertEqual(p1tsr.getName(),"B")
2056 self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2057 data2=MEDFileData(fname)
2058 self.assertEqual(2,data2.getNumberOfParams())
2059 self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)