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.assertEqual((0,-1),medmesh.getNonEmptyLevels())
33 m1_0=medmesh.getLevel0Mesh(True)
34 m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
35 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
36 m2_0=medmesh.getLevelM1Mesh(True)
37 m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
38 self.assertTrue(m2_0.isEqual(m2_1,1e-12));
40 def testMEDMesh2(self):
41 fileName="Pyfile10.med"
43 outFileName="MEDFileMesh1.med"
44 medmesh=MEDFileUMesh.New(fileName,mname)
45 self.assertEqual((0,),medmesh.getNonEmptyLevels())
46 m1_0=medmesh.getLevel0Mesh(True)
47 m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
48 self.assertTrue(m1_0.isEqual(m1_1,1e-12));
49 g1_0=medmesh.getGroup(0,"mesh2",True)
50 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
51 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
52 g1_0=medmesh.getGroup(0,"mesh3",True)
53 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
54 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
55 g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
56 g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
57 g1_1.setName(g1_0.getName())
58 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
59 g1_0=medmesh.getFamily(0,"Family_2",True)
60 g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
61 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
62 g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
63 g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
64 g1_1.setName(g1_0.getName())
65 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
66 self.assertTrue(g1_0.isEqual(g1_1,1e-12));
67 medmesh.write(outFileName,2);
68 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
69 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
70 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
71 self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
72 famn=medmesh.getFamilyNameGivenId(0)
73 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
75 self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
76 self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
77 self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
78 self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
79 self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
82 # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
83 def testMEDMesh3(self):
84 outFileName="MEDFileMesh3.med"
85 c=DataArrayDouble.New()
86 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 ];
87 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
88 c.setValues(coords,9,2)
89 m=MEDCouplingUMesh.New();
90 m.setMeshDimension(2);
92 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
93 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
94 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
95 m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
96 m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
97 m.finishInsertingCells();
100 m1=MEDCouplingUMesh.New();
101 m1.setMeshDimension(1);
103 m1.insertNextCell(NORM_SEG2,2,[1,4])
104 m1.insertNextCell(NORM_SEG2,2,[3,6])
105 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
106 m1.finishInsertingCells();
109 m2=MEDCouplingUMesh.New();
110 m2.setMeshDimension(0);
112 m2.insertNextCell(NORM_POINT1,1,[1])
113 m2.insertNextCell(NORM_POINT1,1,[3])
114 m2.insertNextCell(NORM_POINT1,1,[2])
115 m2.insertNextCell(NORM_POINT1,1,[6])
116 m2.finishInsertingCells();
120 mm=MEDFileUMesh.New()
121 mm.setName("MyFirstMEDCouplingMEDmesh")
122 mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
124 mm.setMeshAtLevel(-1,m1);
125 mm.setMeshAtLevel(0,m);
126 mm.setMeshAtLevel(-2,m2);
127 # playing with groups
128 g1_2=DataArrayInt.New()
129 g1_2.setValues([1,3],2,1)
131 g2_2=DataArrayInt.New()
132 g2_2.setValues([1,2,3],3,1)
134 mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
135 g1_1=DataArrayInt.New()
136 g1_1.setValues([0,1,2],3,1)
138 g2_1=DataArrayInt.New()
139 g2_1.setValues([0,2],2,1)
141 mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
142 g1_N=DataArrayInt.New()
143 g1_N.setValues(range(8),8,1)
145 g2_N=DataArrayInt.New()
146 g2_N.setValues(range(9),9,1)
148 mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
149 mm.createGroupOnAll(0,"GrpOnAllCell")
150 # check content of mm
151 t=mm.getGroupArr(0,"G1",False)
152 self.assertTrue(g1_2.isEqual(t));
153 t=mm.getGroupArr(0,"G2",False)
154 self.assertTrue(g2_2.isEqual(t));
155 t=mm.getGroupArr(-1,"G1",False)
156 self.assertTrue(g1_1.isEqual(t));
157 t=mm.getGroupArr(-1,"G2",False)
158 self.assertTrue(g2_1.isEqual(t));
159 t=mm.getGroupArr(1,"G1",False)
160 self.assertTrue(g1_N.isEqual(t));
161 t=mm.getGroupArr(1,"G2",False)
162 self.assertTrue(g2_N.isEqual(t));
163 self.assertTrue(mm.existsGroup("GrpOnAllCell"));
164 t=mm.getGroupArr(0,"GrpOnAllCell")
165 self.assertTrue(t.getValues()==range(5))
167 mm.write(outFileName,2);
169 mm=MEDFileMesh.New(outFileName)
170 mbis=mm.getMeshAtLevel(0)
171 m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
172 self.assertTrue(m.isEqual(mbis,1e-12));
174 self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
177 # this test is the testMEDMesh3 except that permutation is dealed here
178 def testMEDMesh4(self):
179 outFileName="MEDFileMesh4.med"
180 c=DataArrayDouble.New()
181 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 ];
182 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
183 c.setValues(coords,9,2)
184 c.setInfoOnComponent(0,"abcdef [km]")
185 c.setInfoOnComponent(1,"ghij [MW]")
186 m=MEDCouplingUMesh.New();
187 m.setMeshDimension(2);
189 m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
190 m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
191 m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
192 m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
193 m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
194 m.finishInsertingCells();
197 m1=MEDCouplingUMesh.New();
198 m1.setMeshDimension(1);
200 m1.insertNextCell(NORM_SEG2,2,[1,4])
201 m1.insertNextCell(NORM_SEG3,3,[2,8,5])
202 m1.insertNextCell(NORM_SEG2,2,[3,6])
203 m1.finishInsertingCells();
206 m2=MEDCouplingUMesh.New();
207 m2.setMeshDimension(0);
209 m2.insertNextCell(NORM_POINT1,1,[1])
210 m2.insertNextCell(NORM_POINT1,1,[3])
211 m2.insertNextCell(NORM_POINT1,1,[2])
212 m2.insertNextCell(NORM_POINT1,1,[6])
213 m2.finishInsertingCells();
217 mm=MEDFileUMesh.New()
218 mm.setName("My2ndMEDCouplingMEDmesh")
219 mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
221 renumNode=DataArrayInt.New()
222 renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
223 mm.setRenumFieldArr(1,renumNode)
224 mm.setMeshAtLevel(-1,m1,True);
225 mm.setMeshAtLevel(0,m,True);
226 mm.setMeshAtLevel(-2,m2,True);
227 mm.removeMeshAtLevel(-2)
228 mm.setMeshAtLevel(-2,m2,True);
229 # playing with groups
230 g1_2=DataArrayInt.New()
231 g1_2.setValues([2,3],2,1)
233 g2_2=DataArrayInt.New()
234 g2_2.setValues([2,0,3],3,1)
236 mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
237 g1_1=DataArrayInt.New()
238 g1_1.setValues([0,2,1],3,1)
240 g2_1=DataArrayInt.New()
241 g2_1.setValues([0,2],2,1)
243 mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
244 g1_N=DataArrayInt.New()
245 g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
247 g2_N=DataArrayInt.New()
248 g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
250 mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
251 # check content of mm
252 t=mm.getGroupArr(0,"G1",True)
253 self.assertTrue(g1_2.isEqual(t));
254 t=mm.getGroupArr(0,"G2",True)
255 self.assertTrue(g2_2.isEqual(t));
256 t=mm.getGroupArr(-1,"G1",True)
257 self.assertTrue(g1_1.isEqual(t));
258 t=mm.getGroupArr(-1,"G2",True)
259 self.assertTrue(g2_1.isEqual(t));
260 self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
262 mm.write(outFileName,2);
263 mm2=MEDFileMesh.New(outFileName)
264 res=mm.isEqual(mm2,1e-12)
265 self.assertTrue(res[0])
266 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
267 self.assertEqual(['Family_10','Family_11','Family_3','Family_4','Family_7'],l)
268 mm2.keepFamIdsOnlyOnLevs([3],[-1])
269 for lev in mm.getGrpNonEmptyLevelsExt("G2"):
270 self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
272 l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
273 self.assertEqual(['Family_10','Family_11','Family_12','Family_3','Family_4','Family_7'],l)
275 self.assertEqual([7,7,6],mm2.getFamilyFieldAtLevel(-1).getValues())
276 mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,8)
277 self.assertEqual([7,8,6],mm2.getFamilyFieldAtLevel(-1).getValues())
278 self.assertTrue(not mm2.existsFamily("Family_8"))
279 mm2.createGroupOnAll(-1,"GrpOnAllFace")
280 self.assertTrue(mm2.existsFamily("Family_8"))
281 self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
284 #testing persistence of retrieved arrays
285 def testMEDMesh5(self):
286 fileName="Pyfile18.med"
287 mname="ExampleOfMultiDimW"
288 medmesh=MEDFileUMesh.New(fileName,mname)
289 m1_0=medmesh.getLevel0Mesh(True)
290 da1=medmesh.getFamilyFieldAtLevel(0)
292 self.assertEqual(20,m1_0.getNumberOfCells())
293 self.assertEqual(20,da1.getNumberOfTuples())
296 def testMEDMesh6(self):
297 outFileName="MEDFileMesh5.med"
300 m1=MEDCouplingCMesh.New();
301 da=DataArrayDouble.New()
302 da.setValues([0.,1.,2.],3,1)
303 da.setInfoOnComponent(0,"XX [mm]")
305 da=DataArrayDouble.New()
306 da.setValues([0.,1.2],2,1)
307 da.setInfoOnComponent(0,"YY [km]")
309 da=DataArrayDouble.New()
310 da.setValues([0.,1.3],2,1)
311 da.setInfoOnComponent(0,"ZZ [um]")
314 m.setName("myFirstCartMesh")
315 m.setDescription("mmmmpppppppp")
318 da=DataArrayInt.New()
319 da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
320 m.setFamilyFieldArr(1,da)
321 m.setFamilyId("family1",1)
322 da=m.getFamilyArr(1,"family1")
324 self.assertEqual(expected1,da.getValues())
325 m.write(outFileName,2);
326 mm=MEDFileMesh.New(outFileName)
327 self.assertTrue(m.isEqual(mm,1e-12)[0])
328 self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
331 m1.setTime(tt[2],tt[0],tt[1])
332 m1.setName(m.getName())
333 m1.setTimeUnit(m.getTimeUnit())
334 m1.setDescription(m.getDescription())
335 self.assertTrue(m2.isEqual(m1,1e-12));
338 def testMEDMesh7(self):
339 fileName="Pyfile24.med"
340 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
342 m.setCoords(m2.getCoords())
343 m.setMeshAtLevel(0,m2)
344 m.setMeshAtLevel(-1,m1)
345 m.setMeshAtLevel(-2,m0)
346 m.setFamilyFieldArr(0,f2)
347 m.setFamilyFieldArr(-1,f1)
348 m.setFamilyFieldArr(-2,f0)
349 m.setFamilyFieldArr(1,p)
350 m.setRenumFieldArr(0,n2)
351 m.setRenumFieldArr(-1,n1)
352 m.setRenumFieldArr(-2,n0)
354 for i in xrange(nbOfFams):
355 m.addFamily(fns[i],fids[i])
358 for i in xrange(nbOfGrps):
359 m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
361 m.setName(m2.getName())
362 m.setDescription(m2.getDescription())
364 self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
365 self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
366 self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
367 self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
368 self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
369 self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
370 self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
371 self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
372 self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
377 def funcToTestDelItem(self,ff):
381 #emulation of pointe.med file.
382 def testMEDField1(self):
383 mm=MEDFileMesh.New("Pyfile17.med")
384 mm.write("Pyfile17_bis.med",2)
385 ff=MEDFileFieldMultiTS("Pyfile17.med")
386 tsExpected=[[1,2],[3,4],[5,6]]
387 for pos,f1ts in enumerate(ff):
388 self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
389 self.assertEqual(type(f1ts),MEDFileField1TS)
391 self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
392 self.assertEqual([3,4],ff[1].getTime()[:-1])
393 self.assertEqual([3,4],ff[3,4].getTime()[:-1])
394 self.assertEqual([3,4],ff[0.01].getTime()[:-1])
395 ff.write("Pyfile17_bis.med",0)
397 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
398 self.assertEqual([(1,2),(3,4),(5,6)],ts)
399 self.funcToTestDelItem(ff)
400 ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
401 self.assertEqual([(1,2)],ts)
405 def testMEDField2(self):
406 mm=MEDFileMesh.New("Pyfile19.med")
407 mm.write("Pyfile19_bis.med",2)
408 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
409 ff.write("Pyfile19_bis.med",0)
410 self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
414 def testMEDField3(self):
415 mm=MEDFileMesh.New("Pyfile13.med")
416 mm.write("Pyfile13_bis.med",2)
417 ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
418 ff.write("Pyfile13_bis.med",0)
419 ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
420 f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
421 f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
422 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
426 def testMEDField4(self):
427 mm=MEDFileMesh.New("Pyfile14.med")
428 mm.write("Pyfile14_bis.med",2)
429 ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
430 ff.write("Pyfile14_bis.med",0)
431 ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
432 f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
433 f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
434 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
437 # MEDField get/set on pointe.med
438 def testMEDField5(self):
439 ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
440 f=ff.getFieldAtLevel(ON_CELLS,0)
441 f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
442 self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
443 f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
444 f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
445 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
446 # no with renumbering
447 f=ff.getFieldAtLevel(ON_CELLS,0,1)
448 f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
449 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
450 f=ff.getFieldAtLevel(ON_CELLS,0,3)
451 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
452 f=ff.getFieldAtLevel(ON_CELLS,0,2)
453 self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
454 f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
455 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
458 # MEDField get/set on profiles nodes
459 def testMEDField6(self):
460 ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
461 its=ff.getIterations()
462 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
463 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
464 f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
465 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
466 ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
467 its=ff.getIterations()
468 f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
469 f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
470 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
471 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
472 self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
475 # MEDField get/set on profiles cells
476 def testMEDField7(self):
477 ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
478 its=ff.getIterations()
479 f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
480 f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
481 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
484 #first test of assignation. No profile and types sorted by type.
485 def testMEDField8(self):
487 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
489 mm1=MEDFileUMesh.New()
490 mm1.setCoords(m1.getCoords())
491 mm1.setMeshAtLevel(0,m1)
492 mm1.setName(m1.getName())
494 ff1=MEDFileField1TS.New()
495 ff1.setFieldNoProfileSBT(f1)
497 f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
498 itt,orr,ti=ff1.getTime()
499 self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
500 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
502 itt,orr,ti=ff1.getTime()
503 self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
504 da,infos=ff1.getUndergroundDataArrayExt()
505 f2.getArray().setName(da.getName())#da has the same name than f2
506 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
507 self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
510 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
512 mm1=MEDFileUMesh.New()
513 mm1.setCoords(m1.getCoords())
514 mm1.setMeshAtLevel(0,m1)
515 mm1.setName(m1.getName())
517 ff1=MEDFileField1TS.New()
518 ff1.setFieldNoProfileSBT(f1)
520 da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
522 f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
523 self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
524 f1.getArray().setIJ(0,0,nv)
525 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
528 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
530 mm1=MEDFileUMesh.New()
531 mm1.setCoords(m1.getCoords())
532 mm1.setMeshAtLevel(0,m1)
533 mm1.setName(m1.getName())
535 ff1=MEDFileField1TS.New()
536 ff1.setFieldNoProfileSBT(f1)
538 f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
539 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
540 da,infos=ff1.getUndergroundDataArrayExt()
541 f2.getArray().setName(da.getName())#da has the same name than f2
542 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
543 self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
546 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
548 mm1=MEDFileUMesh.New()
549 mm1.setCoords(m1.getCoords())
550 mm1.setMeshAtLevel(0,m1)
551 mm1.setName(m1.getName())
553 ff1=MEDFileField1TS.New()
554 ff1.setFieldNoProfileSBT(f1)
556 ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
557 f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
558 self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
559 sbt=ff2.getFieldSplitedByType2()
560 loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
561 self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
562 self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
563 self.assertEqual(6,loc1.getNumberOfPointsInCells())
564 self.assertEqual(3,loc1.getNumberOfGaussPoints())
565 self.assertEqual(2,loc1.getDimension())
566 da,infos=ff2.getUndergroundDataArrayExt()
567 f2.getArray().setName(da.getName())#da has the same name than f2
568 self.assertTrue(da.isEqual(f2.getArray(),1e-12))
569 self.assertEqual(53,da.getNumberOfTuples())
570 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)
574 def testMEDFileData1(self):
578 m1=MEDLoaderDataForTest.build1DMesh_1()
579 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
580 mmm1=MEDFileMeshMultiTS.New() ;
581 mmm1.setOneTimeStep(mm1)
582 m2=MEDLoaderDataForTest.build2DCurveMesh_1()
583 mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
584 mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
585 ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
587 for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
588 self.assertEqual(name,mmm.getName())
589 self.assertEqual(type(mmm),MEDFileUMesh)
591 self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
593 ff1=MEDFileFieldMultiTS.New()
594 ff21=MEDFileFieldMultiTS.New()
595 ff22=MEDFileFieldMultiTS.New()
596 f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
597 f1.getArray().setInfoOnComponent(0,"power [kW]")
598 ff1.appendFieldNoProfileSBT(f1)
599 f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
600 f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
601 ff21.appendFieldNoProfileSBT(f21)
602 f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
603 f22.applyFunc(2,"3*x*IVec+2*x*JVec")
604 f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
605 ff22.appendFieldNoProfileSBT(f22)
606 fs=MEDFileFields.New()
607 fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
608 for name,fmts in zip(["f1","f21","f22"],fs):
609 self.assertEqual(name,fmts.getName())
613 fname2="Pyfile29_2.med"
616 d2=MEDFileData.New(fname2)
617 self.assertEqual(2,d2.getNumberOfMeshes())
618 self.assertEqual(3,d2.getNumberOfFields())
619 self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
620 self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
621 self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
622 m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
623 self.assertTrue(m1.isEqual(m1bis,1e-12))
624 self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
625 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
626 self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
627 self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
628 self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
631 def testMEDField9(self):
632 # first test field profile WR. Full type but with some type missing
634 m1=MEDLoaderDataForTest.build2DMesh_3()
635 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
637 ff1=MEDFileField1TS.New()
638 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
639 d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
640 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.
641 da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
643 ff1.setFieldProfile(f1,mm1,0,da)
644 ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
647 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
648 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
649 self.assertTrue(vals.isEqual(d,1e-14))
651 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
652 sbt=ff2.getFieldSplitedByType2()
653 self.assertEqual(3,sbt[0][0])#TRI3
654 self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
655 self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
656 self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
657 self.assertEqual(4,sbt[1][0])#QUAD4
658 self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
659 self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
660 self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
661 self.assertEqual([0],ff2.getTypesOfFieldAvailable())
662 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
663 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
664 self.assertTrue(vals.isEqual(d,1e-14))
667 def testMEDField10(self):
669 m1=MEDLoaderDataForTest.build2DMesh_1()
670 m1.renumberCells([0,1,4,2,3,5],False)
671 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
673 ff1=MEDFileFieldMultiTS.New()
674 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
675 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
676 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.
677 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
679 ff1.appendFieldProfile(f1,mm1,0,da)
680 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
681 ff1.appendFieldProfile(f1,mm1,0,da)
684 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
685 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
686 self.assertTrue(vals.isEqual(e,1e-14))
687 vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
688 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
689 self.assertTrue(vals.isEqual(d,1e-14))
691 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
692 self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
693 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
694 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
695 self.assertTrue(vals.isEqual(e,1e-14))
696 vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
697 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
698 self.assertTrue(vals.isEqual(d,1e-14))
701 # idem testMEDField9 method except that here testing profile on nodes and not on cells.
702 def testMEDField11(self):
704 m1=MEDLoaderDataForTest.build2DMesh_1()
705 m1.renumberCells([0,1,4,2,3,5],False)
706 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
708 ff1=MEDFileField1TS.New()
709 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
710 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
711 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.
712 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
714 ff1.setFieldProfile(f1,mm1,0,da)
715 self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
718 vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
719 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
720 self.assertTrue(vals.isEqual(d,1e-14))
722 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
723 vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
724 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
725 self.assertTrue(vals.isEqual(d,1e-14))
728 def testMEDField12(self):
730 m1=MEDLoaderDataForTest.build2DMesh_1()
731 m1.renumberCells([0,1,4,2,3,5],False)
732 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
734 ff1=MEDFileFieldMultiTS.New()
735 f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
736 d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
737 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.
738 da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
740 ff1.appendFieldProfile(f1,mm1,0,da)
741 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
742 ff1.appendFieldProfile(f1,mm1,0,da)
745 vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
746 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
747 self.assertTrue(vals.isEqual(e,1e-14))
748 vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
749 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
750 self.assertTrue(vals.isEqual(d,1e-14))
752 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
753 vals,pfl=ff2.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=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
757 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
758 self.assertTrue(vals.isEqual(d,1e-14))
761 def testMEDField13(self):
763 m1=MEDLoaderDataForTest.build2DMesh_1()
764 m1.renumberCells([0,1,4,2,3,5],False)
766 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
767 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
769 ff1=MEDFileField1TS.New()
770 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
771 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
772 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.
773 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
775 ff1.setFieldProfile(f1,mm1,0,da)
778 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
779 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
780 self.assertTrue(vals.isEqual(d,1e-14))
782 ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
783 vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
784 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
785 self.assertTrue(vals.isEqual(d,1e-14))
788 def testMEDField14(self):
790 m1=MEDLoaderDataForTest.build2DMesh_1()
791 m1.renumberCells([0,1,4,2,3,5],False)
793 m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
794 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
796 ff1=MEDFileFieldMultiTS.New()
797 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
798 d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800 da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
802 ff1.appendFieldProfile(f1,mm1,0,da)
803 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804 ff1.appendFieldProfile(f1,mm1,0,da)
807 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
808 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
809 self.assertTrue(vals.isEqual(d,1e-14))
810 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
811 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
812 self.assertTrue(vals.isEqual(e,1e-14))
813 self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
815 ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
817 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
818 self.assertTrue(vals.isEqual(d,1e-14))
819 vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
820 self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
821 self.assertTrue(vals.isEqual(e,1e-14))
823 # 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.
824 # 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
825 # 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 !
826 def testMEDField15(self):
828 m0=MEDLoaderDataForTest.build2DMesh_1()
829 m0.renumberCells([0,1,4,2,3,5],False)
831 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
832 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
833 ff1=MEDFileField1TS.New()
834 f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
835 d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836 f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837 da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
839 ff1.setFieldProfile(f1,mm1,0,da)
840 m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
843 f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
844 f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
845 self.assertTrue(p1.isIdentity())
846 self.assertEqual(5,p1.getNumberOfTuples())
847 self.assertTrue(f1.getArray().isEqual(f2,1e-12))
849 # Test for getFieldAtTopLevel method
850 def testMEDField16(self):
852 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
854 mm1=MEDFileUMesh.New()
855 mm1.setCoords(m1.getCoords())
856 mm1.setMeshAtLevel(0,m1)
857 mm1.setName(m1.getName())
858 ff1=MEDFileField1TS.New()
859 ff1.setFieldNoProfileSBT(f1)
860 m2=m1.buildDescendingConnectivity()[0]
861 m2.sortCellsInMEDFileFrmt()
862 m2.setName(m1.getName())
863 mm1.setMeshAtLevel(-1,m2)
865 f2=m2.getMeasureField(True)
866 dd=DataArrayDouble.New()
867 dd.alloc(f2.getArray().getNumberOfTuples(),3)
868 dd[:,0]=f2.getArray()
869 dd[:,1]=2*f2.getArray()
870 dd[:,2]=3*f2.getArray()
871 f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
873 f2.copyTinyStringsFrom(f1)
874 f2.copyTinyAttrFrom(f1)
875 ff1.setFieldNoProfileSBT(f2)
877 # Reading Pyfile37.med
878 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
879 f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
880 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
881 f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
882 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
883 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
884 self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
888 ff1=MEDFileField1TS.New()
889 ff1.setFieldNoProfileSBT(f2)
891 ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
892 f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
893 self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
896 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
897 def testMEDField17(self):
899 m1=MEDLoaderDataForTest.build2DMesh_1()
900 m1.renumberCells([0,1,4,2,3,5],False)
901 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
903 ffs=MEDFileFields.New()
904 ff1=MEDFileFieldMultiTS.New()
905 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
906 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
907 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.
908 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
910 ff1.appendFieldProfile(f1,mm1,0,da)
911 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
912 ff1.appendFieldProfile(f1,mm1,0,da)
914 ffs.setFieldAtPos(0,ff1)
917 ffsr=MEDFileFields.New(fname)
918 ff3=ffsr.getFieldAtPos(0)
919 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
920 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
923 # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
924 def testMEDField18(self):
926 m1=MEDLoaderDataForTest.build2DMesh_1()
927 m1.renumberCells([0,1,4,2,3,5],False)
928 mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
930 ffs=MEDFileFields.New()
931 ff1=MEDFileFieldMultiTS.New()
932 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
933 d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
934 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.
935 da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
937 ff1.appendFieldProfile(f1,mm1,0,da)
938 f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
939 ff1.appendFieldProfile(f1,mm1,0,da)
943 ffsr=MEDFileFields.New(fname)
944 ff3=ffsr.getFieldAtPos(0)
945 f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
946 self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
949 def testMEDFieldBug1(self):
951 d=MEDFileData.New(fname)
952 self.assertEqual(('GP_MyFirstFieldOnGaussPoint0', 'GP_MyFirstFieldOnGaussPoint1', 'GP_MyFirstFieldOnGaussPoint2'),d.getFields().getFieldAtPos(0).getLocs())
955 def testMEDMesh8(self):
956 m=MEDLoaderDataForTest.build1DMesh_1()
957 m.convertQuadraticCellsToLinear()
958 mm=MEDFileUMesh.New()
959 mm.setMeshAtLevel(0,m)
960 g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
961 g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
962 g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
963 mm.setGroupsAtLevel(0,[g1,g2],False)
964 self.assertEqual(('g1','g2'),mm.getGroupsNames())
965 self.assertEqual(('Family_2','Family_3'),mm.getFamiliesNames())
966 self.assertEqual(('Family_2',),mm.getFamiliesOnGroup('g1'))
967 self.assertEqual(('Family_3',),mm.getFamiliesOnGroup('g2'))
968 mm.assignFamilyNameWithGroupName()
969 self.assertEqual(('g1','g2'),mm.getGroupsNames())
970 self.assertEqual(('g1','g2'),mm.getFamiliesNames())
971 self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
972 self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
974 mm=MEDFileUMesh.New()
975 mm.setMeshAtLevel(0,m)
976 mm.setGroupsAtLevel(0,[g1,g2,g3],False)
977 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
978 self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
979 self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
980 self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
981 self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
982 mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
983 self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
984 self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
985 self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
986 self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
987 self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
988 mm.changeFamilyId(5,6)
989 g=mm.getGroupArr(0,"g3")
990 self.assertTrue(g.isEqual(g3));
991 g=mm.getGroupArr(0,"g2")
992 self.assertTrue(g.isEqual(g2));
993 g=mm.getGroupArr(0,"g1")
994 self.assertTrue(g.isEqual(g1));
997 # bug detected by gauthier
998 def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1000 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1002 mm1=MEDFileUMesh.New()
1003 mm1.setCoords(m1.getCoords())
1004 mm1.setMeshAtLevel(0,m1)
1006 ff1=MEDFileField1TS.New()
1007 ff1.setFieldNoProfileSBT(f1)
1009 # writing mesh1 and field1, now creation of mesh2 and field2
1012 m2.translate([0.5,0.6,0.7])
1013 m2.setName("3DSurfMesh_2")
1014 f2.getArray()[:]*=2.
1015 f2.setName("VectorFieldOnCells2")
1016 mm2=MEDFileUMesh.New()
1017 mm2.setCoords(m2.getCoords())
1018 mm2.setMeshAtLevel(0,m2)
1020 ff2=MEDFileField1TS.New()
1021 ff2.setFieldNoProfileSBT(f2)
1024 f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1025 self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1026 f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1027 self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1030 def testMEDLoaderMultiLevelCellField1(self):
1031 fname="Pyfile42.med"
1032 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1033 m=MEDFileUMesh.New()
1034 m.setCoords(m2.getCoords())
1035 m.setMeshAtLevel(0,m2)
1036 m.setMeshAtLevel(-1,m1)
1037 m.setMeshAtLevel(-2,m0)
1041 compNames1=["comp1","comp2","comp3"]
1042 ff1=MEDFileField1TS.New()
1043 da2=DataArrayDouble.New()
1044 da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1046 da2.rearrange(len(compNames1))
1047 da2.setInfoOnComponents(compNames1)
1048 f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1049 ff1.setFieldNoProfileSBT(f2)
1050 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1051 da0=DataArrayDouble.New()
1052 da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1054 da0.rearrange(len(compNames1))
1055 da0.setInfoOnComponents(compNames1)
1056 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1057 ff1.setFieldNoProfileSBT(f0)
1058 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1059 da1=DataArrayDouble.New()
1060 da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1062 da1.rearrange(len(compNames1))
1063 da1.setInfoOnComponents(compNames1)
1064 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1065 ff1.setFieldNoProfileSBT(f1)
1066 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1071 compNames2=["comp11","comp22"]
1072 ff2=MEDFileField1TS.New()
1073 da0=DataArrayDouble.New()
1074 da0.alloc(m0.getNumberOfCells()*2,1)
1077 da0.setInfoOnComponents(compNames2)
1078 f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1079 ff2.setFieldNoProfileSBT(f0)
1080 self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1081 da1=DataArrayDouble.New()
1082 da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1084 da1.rearrange(len(compNames2))
1085 da1.setInfoOnComponents(compNames2)
1086 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1087 ff2.setFieldNoProfileSBT(f1)
1088 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1092 ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1093 self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1094 self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1095 ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1096 self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1097 self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1100 def testFieldOnPflRetrieveOnMdimRelMax1(self):
1101 fname="Pyfile43.med"
1102 m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1103 m=MEDFileUMesh.New()
1104 m.setMeshAtLevel(0,m2)
1105 m.setMeshAtLevel(-1,m1)
1106 m.setMeshAtLevel(-2,m0)
1107 f=MEDFileField1TS.New()
1108 ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1109 ff.setName("NodeFieldPfl")
1110 arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1112 pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1113 f.setFieldProfile(ff,m,-2,pfl)
1114 tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1115 self.assertEqual(ON_NODES,tes0.getTypeOfField())
1116 self.assertEqual(1,tes0.getMesh().getMeshDimension())
1117 self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1118 self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1119 self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1120 self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1121 self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1122 self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1123 expected1=[1.,10.,100.,2.,20.,200.]
1124 nodeCoordsWithValue1=[10.,2.5,0.]
1125 nodeCoordsWithValue2=[10.,3.75,0.]
1127 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1128 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1131 self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1135 tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1136 self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1137 self.assertEqual(0,tes1.getMesh().getMeshDimension())
1138 self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1139 self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1140 self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1141 self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1142 self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1143 self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1145 self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1150 pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1151 f=MEDFileField1TS.New()
1152 f.setFieldProfile(ff,m,-2,pfl)
1153 tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1154 self.assertEqual(ON_NODES,tes2.getTypeOfField())
1155 self.assertEqual(1,tes2.getMesh().getMeshDimension())
1156 self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1157 self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1158 self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1159 self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1160 self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1161 self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1162 expected2=[2.,20.,200.,1.,10.,100.]
1164 self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1165 self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1168 self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1171 tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1172 self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1173 self.assertEqual(0,tes3.getMesh().getMeshDimension())
1174 self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1175 self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1176 self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1177 self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1178 self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1179 self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1181 self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1185 def testDuplicateNodesOnM1Group1(self):
1186 fname="Pyfile44.med"
1187 m=MEDCouplingCMesh.New()
1188 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1189 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1190 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1191 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1192 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1193 m2.setName(m.getName())
1194 grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1195 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1196 mm=MEDFileUMesh.New()
1197 mm.setMeshAtLevel(0,m)
1198 mm.setMeshAtLevel(-1,m2)
1199 mm.setGroupsAtLevel(-1,[grp,grp2])
1200 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1201 mm.setGroupsAtLevel(1,[grpNode])
1202 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1203 ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1204 ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1206 self.assertEqual(30,mm.getNumberOfNodes())
1207 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1208 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1210 nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1211 self.assertEqual([15,16,17],nodes.getValues());
1212 self.assertEqual([7,8,9],cells.getValues());
1213 self.assertEqual([12,13,14],cells2.getValues());
1214 self.assertEqual(33,mm.getNumberOfNodes())
1215 self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1216 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1217 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1218 self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1219 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
1220 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1221 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
1222 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1223 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])
1224 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1225 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1227 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1228 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1229 refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1230 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1231 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1235 def testDuplicateNodesOnM1Group2(self):
1236 fname="Pyfile45.med"
1237 m=MEDCouplingCMesh.New()
1238 m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1239 m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1240 m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1241 m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1242 m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1243 m2.setName(m.getName())
1244 grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1245 grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1246 mm=MEDFileUMesh.New()
1247 mm.setMeshAtLevel(0,m)
1248 mm.setMeshAtLevel(-1,m2)
1249 mm.setGroupsAtLevel(-1,[grp,grp2])
1250 grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1251 mm.setGroupsAtLevel(1,[grpNode])
1252 ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1253 ref1=[4,9,8,14,15,4,10,9,15,16]
1254 ref2=[4,9,8,14,30,4,10,9,30,16]
1256 self.assertEqual(30,mm.getNumberOfNodes())
1257 self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1258 self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1260 nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1261 self.assertEqual([15],nodes.getValues());
1262 self.assertEqual([7,8],cells.getValues());
1263 self.assertEqual([12,13],cells2.getValues());
1264 self.assertEqual(31,mm.getNumberOfNodes())
1265 self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1266 self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1267 self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1268 self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1269 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
1270 self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1271 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
1272 mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1273 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])
1274 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1275 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1277 mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1278 self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1279 refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1280 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1281 self.assertTrue(delta.getMaxValue()[0]<1e-12)
1285 def testBasicConstructors(self):
1286 fname="Pyfile18.med"
1287 m=MEDFileMesh(fname)
1288 m=MEDFileMesh(fname,"ExampleOfMultiDimW",-1,-1)
1289 m=MEDFileMesh(fname)
1290 m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1291 m=MEDFileUMesh(fname)
1294 m=MEDFileCMesh("MEDFileMesh5.med")
1295 m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1297 m=MEDFileMeshMultiTS()
1298 m=MEDFileMeshMultiTS(fname)
1299 m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1301 m=MEDFileMeshes(fname)
1303 m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1304 m=MEDFileFieldMultiTS()
1305 m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1307 m=MEDFileFields(fname)
1309 m=MEDFileData(fname)
1311 m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1312 m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1313 m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1314 m=MEDCouplingCMesh()
1315 m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1316 m=MEDCouplingFieldTemplate(ON_NODES)
1317 m=MEDCouplingMultiFields([])
1318 m=MEDCouplingFieldOverTime([])
1321 # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1322 def testBugSemiPartialField(self):
1323 fname="Pyfile46.med"
1324 m=MEDLoaderDataForTest.build2DMesh_3()
1325 m=m[:10] ; m.setName("mesh")
1326 f=m.getMeasureField(ON_CELLS)
1327 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1329 f.setName("SemiPartialField")
1331 f1=f[:6] ; f1.getMesh().setName(m.getName())
1332 f2=f[6:] ; f2.getMesh().setName(m.getName())
1334 mm=MEDFileUMesh.New()
1335 mm.setMeshAtLevel(0,m)
1336 ff=MEDFileField1TS.New()
1337 ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1341 ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1342 fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1343 fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1345 fread.checkCoherency()
1346 fread2.checkCoherency()
1347 self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1348 self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1351 def testUnPolyze1(self):
1352 fname="Pyfile47.med"
1353 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1354 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]
1355 self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1356 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]]))
1358 self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1359 self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1360 self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1361 self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1362 self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1363 self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1364 self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1365 self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1367 mm.setRenumFieldArr(0,None)
1368 mm.setFamilyFieldArr(-1,None)
1371 def testUnPolyze2(self):
1372 fname="Pyfile48.med"
1373 mfd=MEDFileData.New()
1374 mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1375 meshes=MEDFileMeshes.New()
1377 mfd.setMeshes(meshes)
1378 fields=MEDFileFields.New()
1379 mfd.setFields(fields)
1380 ff=MEDFileFieldMultiTS.New()
1381 fields.pushField(ff)
1383 f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1384 f0_0.setTime(9.5,3,4)
1385 da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1387 f0_0.setMesh(mm.getMeshAtLevel(0))
1388 ff.appendFieldNoProfileSBT(f0_0)
1389 ff0=ff.getTimeStepAtPos(0)
1390 f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1391 f0_1.setTime(9.5,3,4)
1392 pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1393 f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1394 da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1396 ff0.setFieldProfile(f0_1,mm,0,pfl)
1397 f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1398 f0_2.setTime(9.5,3,4)
1399 pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1400 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
1401 f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1403 ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1404 mfd.getFields().shallowCpyGlobs(ff0)
1406 mfd.unPolyzeMeshes()
1408 fmts=mfd.getFields()[0]
1409 self.assertEqual(fmts.getNumberOfTS(),1)
1410 self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1411 arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1412 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))])
1413 self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1414 self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1415 self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1416 self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1417 self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1418 self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1419 self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1420 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))
1421 self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1422 self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1423 self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1424 ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1425 self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1426 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])
1427 self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1428 ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1429 self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1430 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])
1431 self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])