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
21 from MEDLoader import *
23 from math import pi,e,sqrt
24 from MEDLoaderDataForTest import MEDLoaderDataForTest
26 class MEDLoaderTest(unittest.TestCase):
27 def testMEDMesh1(self):
28 fileName="Pyfile18.med"
29 mname="ExampleOfMultiDimW"
30 medmesh=MEDFileMesh.New(fileName,mname)
31 self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
32 m1_0=medmesh.getLevel0Mesh(True)
33 m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
34 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
35 m2_0=medmesh.getLevelM1Mesh(True)
36 m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
37 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
39 def testMEDMesh2(self):
40 fileName="Pyfile10.med"
42 outFileName="MEDFileMesh1.med"
43 medmesh=MEDFileUMesh.New(fileName,mname)
44 self.assertEqual((0,),medmesh.getNonEmptyLevels())
45 m1_0=medmesh.getLevel0Mesh(True)
46 m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
47 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
48 g1_0=medmesh.getGroup(0,"mesh2",True)
49 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
50 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
51 g1_0=medmesh.getGroup(0,"mesh3",True)
52 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
53 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
54 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
55 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
56 g1_1.setName(g1_0.getName())
57 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
58 g1_0=medmesh.getFamily(0,"Family_2",True)
59 g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
60 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
61 g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
62 g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
63 g1_1.setName(g1_0.getName())
64 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
65 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
66 medmesh.write(outFileName,2);
67 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
68 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
69 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
70 self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
71 famn=medmesh.getFamilyNameGivenId(0)
72 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
74 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
75 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
76 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
77 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
78 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
81 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
82 def testMEDMesh3(self):
83 outFileName="MEDFileMesh3.med"
84 c=DataArrayDouble.New()
85 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 ];
86 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
87 c.setValues(coords,9,2)
88 m=MEDCouplingUMesh.New();
89 m.setMeshDimension(2);
91 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
92 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
93 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
94 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
95 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
96 m.finishInsertingCells();
99 m1=MEDCouplingUMesh.New();
100 m1.setMeshDimension(1);
102 m1.insertNextCell(NORM_SEG2,2,[1,4])
103 m1.insertNextCell(NORM_SEG2,2,[3,6])
104 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
105 m1.finishInsertingCells();
108 m2=MEDCouplingUMesh.New();
109 m2.setMeshDimension(0);
111 m2.insertNextCell(NORM_POINT1,1,[1])
112 m2.insertNextCell(NORM_POINT1,1,[3])
113 m2.insertNextCell(NORM_POINT1,1,[2])
114 m2.insertNextCell(NORM_POINT1,1,[6])
115 m2.finishInsertingCells();
119 mm=MEDFileUMesh.New()
120 mm.setName("MyFirstMEDCouplingMEDmesh")
121 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
123 mm.setMeshAtLevel(-1,m1);
124 mm.setMeshAtLevel(0,m);
125 mm.setMeshAtLevel(-2,m2);
126 # playing with groups
127 g1_2=DataArrayInt.New()
128 g1_2.setValues([1,3],2,1)
130 g2_2=DataArrayInt.New()
131 g2_2.setValues([1,2,3],3,1)
133 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
134 g1_1=DataArrayInt.New()
135 g1_1.setValues([0,1,2],3,1)
137 g2_1=DataArrayInt.New()
138 g2_1.setValues([0,2],2,1)
140 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
141 g1_N=DataArrayInt.New()
142 g1_N.setValues(range(8),8,1)
144 g2_N=DataArrayInt.New()
145 g2_N.setValues(range(9),9,1)
147 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
148 mm.createGroupOnAll(0,"GrpOnAllCell")
149 # check content of mm
150 t=mm.getGroupArr(0,"G1",False)
151 self.assertTrue(g1_2.isEqual(t));
152 t=mm.getGroupArr(0,"G2",False)
153 self.assertTrue(g2_2.isEqual(t));
154 t=mm.getGroupArr(-1,"G1",False)
155 self.assertTrue(g1_1.isEqual(t));
156 t=mm.getGroupArr(-1,"G2",False)
157 self.assertTrue(g2_1.isEqual(t));
158 t=mm.getGroupArr(1,"G1",False)
159 self.assertTrue(g1_N.isEqual(t));
160 t=mm.getGroupArr(1,"G2",False)
161 self.assertTrue(g2_N.isEqual(t));
162 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
163 t=mm.getGroupArr(0,"GrpOnAllCell")
164 self.assertTrue(t.getValues()==range(5))
166 mm.write(outFileName,2);
168 mm=MEDFileMesh.New(outFileName)
169 mbis=mm.getMeshAtLevel(0)
170 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
171 self.assertTrue(m.isEqual(mbis,1e-12));
173 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
176 # this test is the testMEDMesh3 except that permutation is dealed here
177 def testMEDMesh4(self):
178 outFileName="MEDFileMesh4.med"
179 c=DataArrayDouble.New()
180 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 ];
181 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
182 c.setValues(coords,9,2)
183 c.setInfoOnComponent(0,"abcdef [km]")
184 c.setInfoOnComponent(1,"ghij [MW]")
185 m=MEDCouplingUMesh.New();
186 m.setMeshDimension(2);
188 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
189 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
190 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
191 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
192 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
193 m.finishInsertingCells();
196 m1=MEDCouplingUMesh.New();
197 m1.setMeshDimension(1);
199 m1.insertNextCell(NORM_SEG2,2,[1,4])
200 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
201 m1.insertNextCell(NORM_SEG2,2,[3,6])
202 m1.finishInsertingCells();
205 m2=MEDCouplingUMesh.New();
206 m2.setMeshDimension(0);
208 m2.insertNextCell(NORM_POINT1,1,[1])
209 m2.insertNextCell(NORM_POINT1,1,[3])
210 m2.insertNextCell(NORM_POINT1,1,[2])
211 m2.insertNextCell(NORM_POINT1,1,[6])
212 m2.finishInsertingCells();
216 mm=MEDFileUMesh.New()
217 mm.setName("My2ndMEDCouplingMEDmesh")
218 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
220 renumNode=DataArrayInt.New()
221 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
222 mm.setRenumFieldArr(1,renumNode)
223 mm.setMeshAtLevel(-1,m1,True);
224 mm.setMeshAtLevel(0,m,True);
225 mm.setMeshAtLevel(-2,m2,True);
226 mm.removeMeshAtLevel(-2)
227 mm.setMeshAtLevel(-2,m2,True);
228 # playing with groups
229 g1_2=DataArrayInt.New()
230 g1_2.setValues([2,3],2,1)
232 g2_2=DataArrayInt.New()
233 g2_2.setValues([2,0,3],3,1)
235 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
236 g1_1=DataArrayInt.New()
237 g1_1.setValues([0,2,1],3,1)
239 g2_1=DataArrayInt.New()
240 g2_1.setValues([0,2],2,1)
242 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
243 g1_N=DataArrayInt.New()
244 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
246 g2_N=DataArrayInt.New()
247 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
249 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
250 # check content of mm
251 t=mm.getGroupArr(0,"G1",True)
252 self.assertTrue(g1_2.isEqual(t));
253 t=mm.getGroupArr(0,"G2",True)
254 self.assertTrue(g2_2.isEqual(t));
255 t=mm.getGroupArr(-1,"G1",True)
256 self.assertTrue(g1_1.isEqual(t));
257 t=mm.getGroupArr(-1,"G2",True)
258 self.assertTrue(g2_1.isEqual(t));
259 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
261 mm.write(outFileName,2);
262 mm2=MEDFileMesh.New(outFileName)
263 res=mm.isEqual(mm2,1e-12)
264 self.assertTrue(res[0])
265 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
266 self.assertEqual(['Family_10','Family_11','Family_3','Family_4','Family_7'],l)
267 mm2.keepFamIdsOnlyOnLevs([3],[-1])
268 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
269 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
271 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
272 self.assertEqual(['Family_10','Family_11','Family_12','Family_3','Family_4','Family_7'],l)
274 self.assertEqual([7,7,6],mm2.getFamilyFieldAtLevel(-1).getValues())
275 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,8)
276 self.assertEqual([7,8,6],mm2.getFamilyFieldAtLevel(-1).getValues())
277 self.assertTrue(not mm2.existsFamily("Family_8"))
278 mm2.createGroupOnAll(-1,"GrpOnAllFace")
279 self.assertTrue(mm2.existsFamily("Family_8"))
280 self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
283 #testing persistence of retrieved arrays
284 def testMEDMesh5(self):
285 fileName="Pyfile18.med"
286 mname="ExampleOfMultiDimW"
287 medmesh=MEDFileUMesh.New(fileName,mname)
288 m1_0=medmesh.getLevel0Mesh(True)
289 da1=medmesh.getFamilyFieldAtLevel(0)
291 self.assertEqual(20,m1_0.getNumberOfCells())
292 self.assertEqual(20,da1.getNumberOfTuples())
295 def testMEDMesh6(self):
296 outFileName="MEDFileMesh5.med"
299 m1=MEDCouplingCMesh.New();
300 da=DataArrayDouble.New()
301 da.setValues([0.,1.,2.],3,1)
302 da.setInfoOnComponent(0,"XX [mm]")
304 da=DataArrayDouble.New()
305 da.setValues([0.,1.2],2,1)
306 da.setInfoOnComponent(0,"YY [km]")
308 da=DataArrayDouble.New()
309 da.setValues([0.,1.3],2,1)
310 da.setInfoOnComponent(0,"ZZ [um]")
313 m.setName("myFirstCartMesh")
314 m.setDescription("mmmmpppppppp")
317 da=DataArrayInt.New()
318 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
319 m.setFamilyFieldArr(1,da)
320 m.setFamilyId("family1",1)
321 da=m.getFamilyArr(1,"family1")
323 self.assertEqual(expected1,da.getValues())
324 m.write(outFileName,2);
325 mm=MEDFileMesh.New(outFileName)
326 self.assertTrue(m.isEqual(mm,1e-12)[0])
327 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
330 m1.setTime(tt[2],tt[0],tt[1])
331 m1.setName(m.getName())
332 m1.setTimeUnit(m.getTimeUnit())
333 m1.setDescription(m.getDescription())
334 self.assertTrue(m2.isEqual(m1,1e-12));
337 def testMEDMesh7(self):
338 fileName="Pyfile24.med"
339 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
341 m.setCoords(m2.getCoords())
342 m.setMeshAtLevel(0,m2)
343 m.setMeshAtLevel(-1,m1)
344 m.setMeshAtLevel(-2,m0)
345 m.setFamilyFieldArr(0,f2)
346 m.setFamilyFieldArr(-1,f1)
347 m.setFamilyFieldArr(-2,f0)
348 m.setFamilyFieldArr(1,p)
349 m.setRenumFieldArr(0,n2)
350 m.setRenumFieldArr(-1,n1)
351 m.setRenumFieldArr(-2,n0)
353 for i in xrange(nbOfFams):
354 m.addFamily(fns[i],fids[i])
357 for i in xrange(nbOfGrps):
358 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
360 m.setName(m2.getName())
361 m.setDescription(m2.getDescription())
363 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
364 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
365 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
366 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
367 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
368 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
369 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
370 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
371 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
376 def funcToTestDelItem(self,ff):
380 #emulation of pointe.med file.
381 def testMEDField1(self):
382 mm=MEDFileMesh.New("Pyfile17.med")
383 mm.write("Pyfile17_bis.med",2)
384 ff=MEDFileFieldMultiTS("Pyfile17.med")
385 tsExpected=[[1,2],[3,4],[5,6]]
386 for pos,f1ts in enumerate(ff):
387 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
388 self.assertEqual(type(f1ts),MEDFileField1TS)
390 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
391 self.assertEqual([3,4],ff[1].getTime()[:-1])
392 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
393 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
394 ff.write("Pyfile17_bis.med",0)
396 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
397 self.assertEqual([(1,2),(3,4),(5,6)],ts)
398 self.funcToTestDelItem(ff)
399 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
400 self.assertEqual([(1,2)],ts)
404 def testMEDField2(self):
405 mm=MEDFileMesh.New("Pyfile19.med")
406 mm.write("Pyfile19_bis.med",2)
407 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
408 ff.write("Pyfile19_bis.med",0)
409 self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
413 def testMEDField3(self):
414 mm=MEDFileMesh.New("Pyfile13.med")
415 mm.write("Pyfile13_bis.med",2)
416 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
417 ff.write("Pyfile13_bis.med",0)
418 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
419 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
420 f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
421 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
425 def testMEDField4(self):
426 mm=MEDFileMesh.New("Pyfile14.med")
427 mm.write("Pyfile14_bis.med",2)
428 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
429 ff.write("Pyfile14_bis.med",0)
430 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
431 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
432 f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
433 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
436 # MEDField get/set on pointe.med
437 def testMEDField5(self):
438 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
439 f=ff.getFieldAtLevel(ON_CELLS,0)
440 f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
441 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
442 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
443 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
444 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
445 # no with renumbering
446 f=ff.getFieldAtLevel(ON_CELLS,0,1)
447 f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
448 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
449 f=ff.getFieldAtLevel(ON_CELLS,0,3)
450 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
451 f=ff.getFieldAtLevel(ON_CELLS,0,2)
452 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
453 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
454 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
457 # MEDField get/set on profiles nodes
458 def testMEDField6(self):
459 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
460 its=ff.getIterations()
461 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
462 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
463 f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
464 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
465 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
466 its=ff.getIterations()
467 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
468 f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
469 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
470 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
471 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
474 # MEDField get/set on profiles cells
475 def testMEDField7(self):
476 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
477 its=ff.getIterations()
478 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
479 f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
480 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
483 #first test of assignation. No profile and types sorted by type.
484 def testMEDField8(self):
486 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
488 mm1=MEDFileUMesh.New()
489 mm1.setCoords(m1.getCoords())
490 mm1.setMeshAtLevel(0,m1)
491 mm1.setName(m1.getName())
493 ff1=MEDFileField1TS.New()
494 ff1.setFieldNoProfileSBT(f1)
496 f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
497 itt,orr,ti=ff1.getTime()
498 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
499 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
501 itt,orr,ti=ff1.getTime()
502 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
503 da,infos=ff1.getUndergroundDataArrayExt()
504 f2.getArray().setName(da.getName())#da has the same name than f2
505 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
506 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
509 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
511 mm1=MEDFileUMesh.New()
512 mm1.setCoords(m1.getCoords())
513 mm1.setMeshAtLevel(0,m1)
514 mm1.setName(m1.getName())
516 ff1=MEDFileField1TS.New()
517 ff1.setFieldNoProfileSBT(f1)
519 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
521 f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
522 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
523 f1.getArray().setIJ(0,0,nv)
524 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
527 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
529 mm1=MEDFileUMesh.New()
530 mm1.setCoords(m1.getCoords())
531 mm1.setMeshAtLevel(0,m1)
532 mm1.setName(m1.getName())
534 ff1=MEDFileField1TS.New()
535 ff1.setFieldNoProfileSBT(f1)
537 f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
538 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
539 da,infos=ff1.getUndergroundDataArrayExt()
540 f2.getArray().setName(da.getName())#da has the same name than f2
541 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
542 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
545 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
547 mm1=MEDFileUMesh.New()
548 mm1.setCoords(m1.getCoords())
549 mm1.setMeshAtLevel(0,m1)
550 mm1.setName(m1.getName())
552 ff1=MEDFileField1TS.New()
553 ff1.setFieldNoProfileSBT(f1)
555 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
556 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
557 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
558 sbt=ff2.getFieldSplitedByType2()
559 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
560 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
561 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
562 self.assertEqual(6,loc1.getNumberOfPointsInCells())
563 self.assertEqual(3,loc1.getNumberOfGaussPoints())
564 self.assertEqual(2,loc1.getDimension())
565 da,infos=ff2.getUndergroundDataArrayExt()
566 f2.getArray().setName(da.getName())#da has the same name than f2
567 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
568 self.assertEqual(53,da.getNumberOfTuples())
569 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)
573 def testMEDFileData1(self):
577 m1=MEDLoaderDataForTest.build1DMesh_1()
578 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
579 mmm1=MEDFileMeshMultiTS.New() ;
580 mmm1.setOneTimeStep(mm1)
581 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
582 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
583 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
584 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
586 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
587 self.assertEqual(name,mmm.getName())
588 self.assertEqual(type(mmm),MEDFileUMesh)
590 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
592 ff1=MEDFileFieldMultiTS.New()
593 ff21=MEDFileFieldMultiTS.New()
594 ff22=MEDFileFieldMultiTS.New()
595 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
596 f1.getArray().setInfoOnComponent(0,"power [kW]")
597 ff1.appendFieldNoProfileSBT(f1)
598 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
599 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
600 ff21.appendFieldNoProfileSBT(f21)
601 f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
602 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
603 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
604 ff22.appendFieldNoProfileSBT(f22)
605 fs=MEDFileFields.New()
606 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
607 for name,fmts in zip(["f1","f21","f22"],fs):
608 self.assertEqual(name,fmts.getName())
612 fname2="Pyfile29_2.med"
615 d2=MEDFileData.New(fname2)
616 self.assertEqual(2,d2.getNumberOfMeshes())
617 self.assertEqual(3,d2.getNumberOfFields())
618 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
619 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
620 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
621 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
622 self.assertTrue(m1.isEqual(m1bis,1e-12))
623 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
624 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
625 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
626 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
627 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
630 def testMEDField9(self):
631 # first test field profile WR. Full type but with some type missing
633 m1=MEDLoaderDataForTest.build2DMesh_3()
634 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
636 ff1=MEDFileField1TS.New()
637 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
638 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
639 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.
640 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
642 ff1.setFieldProfile(f1,mm1,0,da)
643 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
646 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
647 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
648 self.assertTrue(vals.isEqual(d,1e-14))
650 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
651 sbt=ff2.getFieldSplitedByType2()
652 self.assertEqual(3,sbt[0][0])#TRI3
653 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
654 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
655 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
656 self.assertEqual(4,sbt[1][0])#QUAD4
657 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
658 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
659 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
660 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
661 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
662 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
663 self.assertTrue(vals.isEqual(d,1e-14))
666 def testMEDField10(self):
668 m1=MEDLoaderDataForTest.build2DMesh_1()
669 m1.renumberCells([0,1,4,2,3,5],False)
670 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
672 ff1=MEDFileFieldMultiTS.New()
673 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
674 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
675 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.
676 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
678 ff1.appendFieldProfile(f1,mm1,0,da)
679 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
680 ff1.appendFieldProfile(f1,mm1,0,da)
683 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
684 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
685 self.assertTrue(vals.isEqual(e,1e-14))
686 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
687 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
688 self.assertTrue(vals.isEqual(d,1e-14))
690 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
691 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
692 vals,pfl=ff2.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=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
696 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
697 self.assertTrue(vals.isEqual(d,1e-14))
700 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
701 def testMEDField11(self):
703 m1=MEDLoaderDataForTest.build2DMesh_1()
704 m1.renumberCells([0,1,4,2,3,5],False)
705 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
707 ff1=MEDFileField1TS.New()
708 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
709 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
710 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.
711 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
713 ff1.setFieldProfile(f1,mm1,0,da)
714 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
717 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
718 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
719 self.assertTrue(vals.isEqual(d,1e-14))
721 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
722 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
723 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
724 self.assertTrue(vals.isEqual(d,1e-14))
727 def testMEDField12(self):
729 m1=MEDLoaderDataForTest.build2DMesh_1()
730 m1.renumberCells([0,1,4,2,3,5],False)
731 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
733 ff1=MEDFileFieldMultiTS.New()
734 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
735 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
736 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.
737 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
739 ff1.appendFieldProfile(f1,mm1,0,da)
740 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
741 ff1.appendFieldProfile(f1,mm1,0,da)
744 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
745 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
746 self.assertTrue(vals.isEqual(e,1e-14))
747 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
748 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
749 self.assertTrue(vals.isEqual(d,1e-14))
751 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
752 vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
753 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
754 self.assertTrue(vals.isEqual(e,1e-14))
755 vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
756 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
757 self.assertTrue(vals.isEqual(d,1e-14))
760 def testMEDField13(self):
762 m1=MEDLoaderDataForTest.build2DMesh_1()
763 m1.renumberCells([0,1,4,2,3,5],False)
765 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
766 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
768 ff1=MEDFileField1TS.New()
769 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
770 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
771 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.
772 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
774 ff1.setFieldProfile(f1,mm1,0,da)
777 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
778 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
779 self.assertTrue(vals.isEqual(d,1e-14))
781 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
782 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
783 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
784 self.assertTrue(vals.isEqual(d,1e-14))
787 def testMEDField14(self):
789 m1=MEDLoaderDataForTest.build2DMesh_1()
790 m1.renumberCells([0,1,4,2,3,5],False)
792 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
793 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
795 ff1=MEDFileFieldMultiTS.New()
796 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
797 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
798 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.
799 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
801 ff1.appendFieldProfile(f1,mm1,0,da)
802 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
803 ff1.appendFieldProfile(f1,mm1,0,da)
806 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
807 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
808 self.assertTrue(vals.isEqual(d,1e-14))
809 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
810 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
811 self.assertTrue(vals.isEqual(e,1e-14))
812 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
814 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
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))
822 # 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.
823 # 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
824 # 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 !
825 def testMEDField15(self):
827 m0=MEDLoaderDataForTest.build2DMesh_1()
828 m0.renumberCells([0,1,4,2,3,5],False)
830 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
831 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832 ff1=MEDFileField1TS.New()
833 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
834 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
835 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.
836 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
838 ff1.setFieldProfile(f1,mm1,0,da)
839 m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
842 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
843 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
844 self.assertTrue(p1.isIdentity())
845 self.assertEqual(5,p1.getNumberOfTuples())
846 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
848 # Test for getFieldAtTopLevel method
849 def testMEDField16(self):
851 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
853 mm1=MEDFileUMesh.New()
854 mm1.setCoords(m1.getCoords())
855 mm1.setMeshAtLevel(0,m1)
856 mm1.setName(m1.getName())
857 ff1=MEDFileField1TS.New()
858 ff1.setFieldNoProfileSBT(f1)
859 m2=m1.buildDescendingConnectivity()[0]
860 m2.sortCellsInMEDFileFrmt()
861 m2.setName(m1.getName())
862 mm1.setMeshAtLevel(-1,m2)
864 f2=m2.getMeasureField(True)
865 dd=DataArrayDouble.New()
866 dd.alloc(f2.getArray().getNumberOfTuples(),3)
867 dd[:,0]=f2.getArray()
868 dd[:,1]=2*f2.getArray()
869 dd[:,2]=3*f2.getArray()
870 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
872 f2.copyTinyStringsFrom(f1)
873 f2.copyTinyAttrFrom(f1)
874 ff1.setFieldNoProfileSBT(f2)
876 # Reading Pyfile37.med
877 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
878 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
879 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
880 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
881 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
882 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
883 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
887 ff1=MEDFileField1TS.New()
888 ff1.setFieldNoProfileSBT(f2)
890 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
891 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
892 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
895 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
896 def testMEDField17(self):
898 m1=MEDLoaderDataForTest.build2DMesh_1()
899 m1.renumberCells([0,1,4,2,3,5],False)
900 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
902 ffs=MEDFileFields.New()
903 ff1=MEDFileFieldMultiTS.New()
904 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
905 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
906 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.
907 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
909 ff1.appendFieldProfile(f1,mm1,0,da)
910 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
911 ff1.appendFieldProfile(f1,mm1,0,da)
913 ffs.setFieldAtPos(0,ff1)
916 ffsr=MEDFileFields.New(fname)
917 ff3=ffsr.getFieldAtPos(0)
918 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
919 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
922 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
923 def testMEDField18(self):
925 m1=MEDLoaderDataForTest.build2DMesh_1()
926 m1.renumberCells([0,1,4,2,3,5],False)
927 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
929 ffs=MEDFileFields.New()
930 ff1=MEDFileFieldMultiTS.New()
931 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
932 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
933 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.
934 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
936 ff1.appendFieldProfile(f1,mm1,0,da)
937 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
938 ff1.appendFieldProfile(f1,mm1,0,da)
942 ffsr=MEDFileFields.New(fname)
943 ff3=ffsr.getFieldAtPos(0)
944 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
945 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
948 def testMEDFieldBug1(self):
950 d=MEDFileData.New(fname)
951 self.assertEqual(('GP_MyFirstFieldOnGaussPoint0', 'GP_MyFirstFieldOnGaussPoint1', 'GP_MyFirstFieldOnGaussPoint2'),d.getFields().getFieldAtPos(0).getLocs())
954 def testMEDMesh8(self):
955 m=MEDLoaderDataForTest.build1DMesh_1()
956 m.convertQuadraticCellsToLinear()
957 mm=MEDFileUMesh.New()
958 mm.setMeshAtLevel(0,m)
959 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
960 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
961 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
962 mm.setGroupsAtLevel(0,[g1,g2],False)
963 self.assertEqual(('g1','g2'),mm.getGroupsNames())
964 self.assertEqual(('Family_2','Family_3'),mm.getFamiliesNames())
965 self.assertEqual(('Family_2',),mm.getFamiliesOnGroup('g1'))
966 self.assertEqual(('Family_3',),mm.getFamiliesOnGroup('g2'))
967 mm.assignFamilyNameWithGroupName()
968 self.assertEqual(('g1','g2'),mm.getGroupsNames())
969 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
970 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
971 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
973 mm=MEDFileUMesh.New()
974 mm.setMeshAtLevel(0,m)
975 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
976 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
977 self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
978 self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
979 self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
980 self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
981 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
982 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
983 self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
984 self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
985 self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
986 self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
987 mm.changeFamilyId(5,6)
988 g=mm.getGroupArr(0,"g3")
989 self.assertTrue(g.isEqual(g3));
990 g=mm.getGroupArr(0,"g2")
991 self.assertTrue(g.isEqual(g2));
992 g=mm.getGroupArr(0,"g1")
993 self.assertTrue(g.isEqual(g1));
996 # bug detected by gauthier
997 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
999 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1001 mm1=MEDFileUMesh.New()
1002 mm1.setCoords(m1.getCoords())
1003 mm1.setMeshAtLevel(0,m1)
1005 ff1=MEDFileField1TS.New()
1006 ff1.setFieldNoProfileSBT(f1)
1008 # writing mesh1 and field1, now creation of mesh2 and field2
1011 m2.translate([0.5,0.6,0.7])
1012 m2.setName("3DSurfMesh_2")
1013 f2.getArray()[:]*=2.
1014 f2.setName("VectorFieldOnCells2")
1015 mm2=MEDFileUMesh.New()
1016 mm2.setCoords(m2.getCoords())
1017 mm2.setMeshAtLevel(0,m2)
1019 ff2=MEDFileField1TS.New()
1020 ff2.setFieldNoProfileSBT(f2)
1023 f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1024 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1025 f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1026 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1029 def testMEDLoaderMultiLevelCellField1(self):
1030 fname="Pyfile42.med"
1031 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1032 m=MEDFileUMesh.New()
1033 m.setCoords(m2.getCoords())
1034 m.setMeshAtLevel(0,m2)
1035 m.setMeshAtLevel(-1,m1)
1036 m.setMeshAtLevel(-2,m0)
1040 compNames1=["comp1","comp2","comp3"]
1041 ff1=MEDFileField1TS.New()
1042 da2=DataArrayDouble.New()
1043 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1045 da2.rearrange(len(compNames1))
1046 da2.setInfoOnComponents(compNames1)
1047 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1048 ff1.setFieldNoProfileSBT(f2)
1049 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1050 da0=DataArrayDouble.New()
1051 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1053 da0.rearrange(len(compNames1))
1054 da0.setInfoOnComponents(compNames1)
1055 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1056 ff1.setFieldNoProfileSBT(f0)
1057 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1058 da1=DataArrayDouble.New()
1059 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1061 da1.rearrange(len(compNames1))
1062 da1.setInfoOnComponents(compNames1)
1063 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1064 ff1.setFieldNoProfileSBT(f1)
1065 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1070 compNames2=["comp11","comp22"]
1071 ff2=MEDFileField1TS.New()
1072 da0=DataArrayDouble.New()
1073 da0.alloc(m0.getNumberOfCells()*2,1)
1076 da0.setInfoOnComponents(compNames2)
1077 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1078 ff2.setFieldNoProfileSBT(f0)
1079 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1080 da1=DataArrayDouble.New()
1081 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1083 da1.rearrange(len(compNames2))
1084 da1.setInfoOnComponents(compNames2)
1085 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1086 ff2.setFieldNoProfileSBT(f1)
1087 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1091 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1092 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1093 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1094 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1095 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1096 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1099 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1100 fname="Pyfile43.med"
1101 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1102 m=MEDFileUMesh.New()
1103 m.setMeshAtLevel(0,m2)
1104 m.setMeshAtLevel(-1,m1)
1105 m.setMeshAtLevel(-2,m0)
1106 f=MEDFileField1TS.New()
1107 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1108 ff.setName("NodeFieldPfl")
1109 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1111 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1112 f.setFieldProfile(ff,m,-2,pfl)
1113 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1114 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1115 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1116 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1117 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1118 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1119 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1120 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1121 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1122 expected1=[1.,10.,100.,2.,20.,200.]
1123 nodeCoordsWithValue1=[10.,2.5,0.]
1124 nodeCoordsWithValue2=[10.,3.75,0.]
1126 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1127 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1130 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1134 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1135 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1136 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1137 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1138 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1139 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1140 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1141 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1142 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1144 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1149 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1150 f=MEDFileField1TS.New()
1151 f.setFieldProfile(ff,m,-2,pfl)
1152 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1153 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1154 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1155 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1156 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1157 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1158 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1159 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1160 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1161 expected2=[2.,20.,200.,1.,10.,100.]
1163 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1164 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1167 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1170 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1171 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1172 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1173 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1174 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1175 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1176 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1177 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1178 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1180 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1184 def testDuplicateNodesOnM1Group1(self):
1185 fname="Pyfile44.med"
1186 m=MEDCouplingCMesh.New()
1187 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1188 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1189 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1190 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1191 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1192 m2.setName(m.getName())
1193 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1194 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1195 mm=MEDFileUMesh.New()
1196 mm.setMeshAtLevel(0,m)
1197 mm.setMeshAtLevel(-1,m2)
1198 mm.setGroupsAtLevel(-1,[grp,grp2])
1199 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1200 mm.setGroupsAtLevel(1,[grpNode])
1201 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1202 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1203 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1205 self.assertEqual(30,mm.getNumberOfNodes())
1206 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1207 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1209 nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1210 self.assertEqual([15,16,17],nodes.getValues());
1211 self.assertEqual([7,8,9],cells.getValues());
1212 self.assertEqual([12,13,14],cells2.getValues());
1213 self.assertEqual(33,mm.getNumberOfNodes())
1214 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1215 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1216 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1217 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1218 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
1219 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1220 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
1221 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1222 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])
1223 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1224 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1226 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1227 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1228 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1229 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1230 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1234 def testDuplicateNodesOnM1Group2(self):
1235 fname="Pyfile45.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]) ; 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]
1253 ref2=[4,9,8,14,30,4,10,9,30,16]
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]].getNodalConnectivity().getValues())
1259 nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1260 self.assertEqual([15],nodes.getValues());
1261 self.assertEqual([7,8],cells.getValues());
1262 self.assertEqual([12,13],cells2.getValues());
1263 self.assertEqual(31,mm.getNumberOfNodes())
1264 self.assertEqual([4,6],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],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]].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:9]=[1.365,1.47]
1279 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1280 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1284 def testBasicConstructors(self):
1285 fname="Pyfile18.med"
1286 m=MEDFileMesh(fname)
1287 m=MEDFileMesh(fname,"ExampleOfMultiDimW",-1,-1)
1288 m=MEDFileMesh(fname)
1289 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1290 m=MEDFileUMesh(fname)
1293 m=MEDFileCMesh("MEDFileMesh5.med")
1294 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1296 m=MEDFileMeshMultiTS()
1297 m=MEDFileMeshMultiTS(fname)
1298 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1300 m=MEDFileMeshes(fname)
1302 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1303 m=MEDFileFieldMultiTS()
1304 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1306 m=MEDFileFields(fname)
1308 m=MEDFileData(fname)
1310 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1311 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1312 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1313 m=MEDCouplingCMesh()
1314 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1315 m=MEDCouplingFieldTemplate(ON_NODES)
1316 m=MEDCouplingMultiFields([])
1317 m=MEDCouplingFieldOverTime([])
1320 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1321 def testBugSemiPartialField(self):
1322 fname="Pyfile46.med"
1323 m=MEDLoaderDataForTest.build2DMesh_3()
1324 m=m[:10] ; m.setName("mesh")
1325 f=m.getMeasureField(ON_CELLS)
1326 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1328 f.setName("SemiPartialField")
1330 f1=f[:6] ; f1.getMesh().setName(m.getName())
1331 f2=f[6:] ; f2.getMesh().setName(m.getName())
1333 mm=MEDFileUMesh.New()
1334 mm.setMeshAtLevel(0,m)
1335 ff=MEDFileField1TS.New()
1336 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1340 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1341 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1342 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1344 fread.checkCoherency()
1345 fread2.checkCoherency()
1346 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1347 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1350 def testUnPolyze1(self):
1351 fname="Pyfile47.med"
1352 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1353 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]
1354 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1355 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]]))
1357 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1358 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1359 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1360 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1361 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1362 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1363 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1364 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1366 mm.setRenumFieldArr(0,None)
1367 mm.setFamilyFieldArr(-1,None)
1370 def testUnPolyze2(self):
1371 fname="Pyfile48.med"
1372 mfd=MEDFileData.New()
1373 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1374 meshes=MEDFileMeshes.New()
1376 mfd.setMeshes(meshes)
1377 fields=MEDFileFields.New()
1378 mfd.setFields(fields)
1379 ff=MEDFileFieldMultiTS.New()
1380 fields.pushField(ff)
1382 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1383 f0_0.setTime(9.5,3,4)
1384 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1386 f0_0.setMesh(mm.getMeshAtLevel(0))
1387 ff.appendFieldNoProfileSBT(f0_0)
1388 ff0=ff.getTimeStepAtPos(0)
1389 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1390 f0_1.setTime(9.5,3,4)
1391 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1392 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1393 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1395 ff0.setFieldProfile(f0_1,mm,0,pfl)
1396 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1397 f0_2.setTime(9.5,3,4)
1398 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1399 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
1400 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1402 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1403 mfd.getFields().shallowCpyGlobs(ff0)
1405 mfd.unPolyzeMeshes()
1407 fmts=mfd.getFields()[0]
1408 self.assertEqual(fmts.getNumberOfTS(),1)
1409 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1410 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1411 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))])
1412 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1413 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1414 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1415 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1416 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1417 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1418 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1419 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))
1420 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1421 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1422 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1423 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1424 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1425 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])
1426 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1427 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1428 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1429 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])
1430 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])