1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2015 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author : Anthony Geay (CEA/DEN)
24 from math import pi,e,sqrt
25 from MEDLoaderDataForTest import MEDLoaderDataForTest
27 class MEDLoaderTest1(unittest.TestCase):
28 def testMesh1DRW(self):
29 mesh=MEDLoaderDataForTest.build1DMesh_1();
30 mesh.checkCoherency();
31 MEDLoader.MEDLoader.WriteUMesh("Pyfile1.med",mesh,True);
32 mesh_rw=MEDLoader.MEDLoader.ReadUMeshFromFile("Pyfile1.med",mesh.getName(),0);
33 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
36 def testMesh2DCurveRW(self):
37 mesh=MEDLoaderDataForTest.build2DCurveMesh_1();
38 mesh.checkCoherency();
39 MEDLoader.MEDLoader.WriteUMesh("Pyfile2.med",mesh,True);
40 mesh_rw=MEDLoader.MEDLoader.ReadUMeshFromFile("Pyfile2.med",mesh.getName(),0);
41 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
44 def testMesh2DRW(self):
45 mesh=MEDLoaderDataForTest.build2DMesh_1();
46 mesh.checkCoherency();
47 MEDLoader.MEDLoader.WriteUMesh("Pyfile3.med",mesh,True);
48 mesh_rw=MEDLoader.MEDLoader.ReadUMeshFromFile("Pyfile3.med",mesh.getName(),0);
49 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
52 def testMesh3DSurfRW(self):
53 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
54 mesh.checkCoherency();
55 MEDLoader.MEDLoader.WriteUMesh("Pyfile4.med",mesh,True);
56 mesh_rw=MEDLoader.MEDLoader.ReadUMeshFromFile("Pyfile4.med",mesh.getName(),0);
57 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
60 def testMesh3DRW(self):
61 mesh=MEDLoaderDataForTest.build3DMesh_1();
62 mesh.checkCoherency();
63 MEDLoader.MEDLoader.WriteUMesh("Pyfile5.med",mesh,True);
64 mesh_rw=MEDLoader.MEDLoader.ReadUMeshFromFile("Pyfile5.med",mesh.getName(),0);
65 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
68 def testFieldRW1(self):
69 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
70 MEDLoader.MEDLoader.WriteField("Pyfile6.med",f1,True);
71 f2=MEDLoader.MEDLoader.ReadFieldCell("Pyfile6.med",f1.getMesh().getName(),0,f1.getName(),0,1);
72 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
74 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
75 MEDLoader.MEDLoader.WriteField("Pyfile7.med",f1,True);
76 f2=MEDLoader.MEDLoader.ReadFieldNode("Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
77 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
78 self.assertRaises(Exception,MEDLoader.MEDLoader.ReadFieldCell,"Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
81 def testFieldRW2(self):
82 fileName="Pyfile8.med";
85 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
86 MEDLoader.MEDLoader.WriteField(fileName,f1,True);
88 f1.getArray().setIJ(0,0,VAL1);
89 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
90 f1.setTime(10.14,18,19);
91 f1.getArray().setIJ(0,0,VAL2);
92 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
93 #retrieving time steps...
94 f2=MEDLoader.MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),8,9);
96 f1.getArray().setIJ(0,0,VAL1);
97 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
98 f2=MEDLoader.MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),0,1);
99 f3=MEDLoaderDataForTest.buildVecFieldOnCells_1();
100 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
101 f2=MEDLoader.MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),18,19);
102 f1.setTime(10.14,18,19);
103 f1.getArray().setIJ(0,0,VAL2);
104 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
105 #test of throw on invalid (dt,it)
106 self.assertRaises(Exception,MEDLoader.MEDLoader.ReadFieldCell,fileName,f1.getMesh().getName(),0,f1.getName(),28,19);
108 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
109 fileName2="Pyfile9.med";
110 MEDLoader.MEDLoader.WriteField(fileName2,f1,True);
111 f1.setTime(110.,108,109);
112 tmp=f1.getArray().getPointer();
113 f1.getArray().setIJ(0,3,VAL1);
114 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName2,f1);
115 f1.setTime(210.,208,209);
116 f1.getArray().setIJ(0,3,VAL2);
117 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName2,f1);
118 f2=MEDLoader.MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),108,109);
119 f1.setTime(110.,108,109);
120 f1.getArray().setIJ(0,3,VAL1);
121 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
122 f2=MEDLoader.MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),2,3);
123 f3=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
124 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
125 f2=MEDLoader.MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),208,209);
126 f1.setTime(210.,208,209);
127 f1.getArray().setIJ(0,3,VAL2);
128 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
132 # Multi field in a same file, but this field has several
134 def testFieldRW3(self):
135 fileName="Pyfile11.med";
137 VAL2=-1111111111111.;
140 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
141 f1.getMesh().setName(name3);
144 tmp=f1.getArray().getPointer();
145 f1.getArray().setIJ(0,0,VAL1);
146 MEDLoader.MEDLoader.WriteField(fileName,f1,True);
147 f1.setTime(10.14,18,19);
148 f1.getArray().setIJ(0,0,VAL2);
149 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
150 f1.getMesh().setName(name3);
151 f1.setTime(10.55,28,29);
152 f1.getArray().setIJ(0,0,3*VAL1);
153 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
154 vec=MEDLoader.MEDLoader.GetMeshNamesOnField(fileName,name1);
155 f1.setTime(10.66,38,39);
156 f1.getArray().setIJ(0,0,3*VAL2);
157 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
158 f1.setTime(10.77,48,49);
159 f1.getArray().setIJ(0,0,4*VAL2);
160 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
162 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
164 f1.getMesh().setName(name3);
165 f1.setTime(110.,8,9);
166 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
167 f1.setTime(110.,108,109);
168 tmp=f1.getArray().getPointer();
169 f1.getArray().setIJ(0,3,VAL1);
170 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
171 f1.setTime(210.,208,209);
172 f1.getArray().setIJ(0,3,VAL2);
173 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
175 it1=MEDLoader.MEDLoader.GetCellFieldIterations(fileName,name3,name1);
176 self.assertEqual(5,len(it1));
177 self.assertEqual(8,it1[0][0]); self.assertEqual(9,it1[0][1]);
178 self.assertEqual(18,it1[1][0]); self.assertEqual(19,it1[1][1]);
179 self.assertEqual(28,it1[2][0]); self.assertEqual(29,it1[2][1]);
180 self.assertEqual(38,it1[3][0]); self.assertEqual(39,it1[3][1]);
181 self.assertEqual(48,it1[4][0]); self.assertEqual(49,it1[4][1]);
182 it3=MEDLoader.MEDLoader.GetNodeFieldIterations(fileName,name3,name1);
183 self.assertEqual(3,len(it3));
184 self.assertEqual(8,it3[0][0]); self.assertEqual(9,it3[0][1]);
185 self.assertEqual(108,it3[1][0]); self.assertEqual(109,it3[1][1]);
186 self.assertEqual(208,it3[2][0]); self.assertEqual(209,it3[2][1]);
189 f1=MEDLoader.MEDLoader.ReadFieldCell(fileName,name3,0,name1,8,9);
190 self.assertAlmostEqual(VAL1,f1.getArray().getIJ(0,0),13);
191 f1=MEDLoader.MEDLoader.ReadFieldCell(fileName,name3,0,name1,18,19);
192 self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,0),13);
193 f1=MEDLoader.MEDLoader.ReadFieldCell(fileName,name3,0,name1,28,29);
194 self.assertAlmostEqual(3*VAL1,f1.getArray().getIJ(0,0),13);
195 f1=MEDLoader.MEDLoader.ReadFieldCell(fileName,name3,0,name1,38,39);
196 self.assertAlmostEqual(3*VAL2,f1.getArray().getIJ(0,0),13);
197 f1=MEDLoader.MEDLoader.ReadFieldCell(fileName,name3,0,name1,48,49);
198 self.assertAlmostEqual(4*VAL2,f1.getArray().getIJ(0,0),13);
200 f1=MEDLoader.MEDLoader.ReadFieldNode(fileName,name3,0,name1,8,9);
201 self.assertAlmostEqual(71.,f1.getArray().getIJ(0,3),13);
202 f1=MEDLoader.MEDLoader.ReadFieldNode(fileName,name3,0,name1,108,109);
203 self.assertAlmostEqual(VAL1,f1.getArray().getIJ(0,3),13);
204 f1=MEDLoader.MEDLoader.ReadFieldNode(fileName,name3,0,name1,208,209);
205 self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,3),13);
208 def testMultiMeshRW1(self):
209 fileName="Pyfile10.med";
210 mesh1=MEDLoaderDataForTest.build3DMesh_1();
212 mesh2=mesh1.buildPartOfMySelf(part1,True);
213 mesh2.setName("mesh2");
215 mesh3=mesh1.buildPartOfMySelf(part2,True);
216 mesh3.setName("mesh3");
217 mesh4=MEDLoader.MEDCouplingUMesh.New();
218 mesh4.setName("mesh4");
219 mesh4.setMeshDimension(3);
220 mesh4.allocateCells(1);
222 mesh4.insertNextCell(MEDLoader.NORM_TETRA4,4,conn[0:4])
223 mesh4.finishInsertingCells();
224 mesh4.setCoords(mesh1.getCoords());
225 meshes=[mesh1,mesh2,mesh3,mesh4]
227 MEDLoader.MEDLoader.WriteUMeshesPartition(fileName,mnane,meshes,True);
229 mesh5=MEDLoader.MEDLoader.ReadUMeshFromFile(fileName,mnane);
230 mesh1.setName(mnane);
231 part3=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
232 mesh6=mesh5.buildPartOfMySelf(part3,True);
233 mesh6.setName(mnane);
234 self.assertTrue(mesh6.isEqual(mesh1,1e-12));
235 grps=MEDLoader.MEDLoader.GetMeshGroupsNames(fileName,mnane);
236 self.assertEqual(4,len(grps));
240 grps.index("3DMesh_1");
243 mesh2_2=MEDLoader.MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
244 self.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
246 mesh3_2=MEDLoader.MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
247 self.assertTrue(mesh3_2.isEqual(mesh3,1e-12));
249 mesh4_2=MEDLoader.MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
250 self.assertTrue(mesh4_2.isEqual(mesh4,1e-12));
252 mesh1_2=MEDLoader.MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
253 mesh1.setName("3DMesh_1");
254 self.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
256 vec=["Family_-3","Family_-5"];
257 mesh2_2=MEDLoader.MEDLoader.ReadUMeshFromFamilies(fileName,mnane,0,vec);
258 mesh2_2.setName("mesh2");
259 self.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
261 ret=MEDLoader.MEDLoader.GetMeshFamiliesNamesOnGroup(fileName,"3DToto","3DMesh_1");
262 self.assertEqual(4,len(ret));
263 ref=['Family_-3','Family_-4','Family_-2','Family_-5']
264 self.assertIn(ref[0],ret);
265 self.assertIn(ref[1],ret);
266 self.assertIn(ref[2],ret);
267 self.assertIn(ref[3],ret);
269 ret1=MEDLoader.MEDLoader.GetMeshGroupsNamesOnFamily(fileName,"3DToto","Family_-3");
270 self.assertEqual(2,len(ret1));
271 self.assertEqual(ret1[0],"3DMesh_1");
272 self.assertEqual(ret1[1],"mesh2");
275 def testFieldProfilRW1(self):
276 fileName="Pyfile12.med";
277 mesh1=MEDLoaderDataForTest.build3DMesh_1();
278 da,b,newNbOfNodes=mesh1.mergeNodes(1e-12);
279 MEDLoader.MEDLoader.WriteUMesh(fileName,mesh1,True);
281 mesh2=mesh1.buildPartOfMySelf(part1,True);
282 mesh2.setName(mesh1.getName());#<- important for the test
284 nbOfCells=mesh2.getNumberOfCells();
285 self.assertEqual(5,nbOfCells);
286 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
287 f1.setName("VectorFieldOnCells");
289 array=MEDLoader.DataArrayDouble.New();
290 array.alloc(nbOfCells,2);
292 arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
293 array.setValues(arr1,nbOfCells,2);
294 f1.setTime(3.14,2,7);
297 MEDLoader.MEDLoader.WriteField(fileName,f1,False);#<- False important for the test
299 f2=MEDLoader.MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
300 tt=MEDLoader.MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
301 self.assertEqual(tt,[MEDLoader.ON_CELLS]);
303 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
307 def testFieldGaussRW1(self):
308 fileName="Pyfile13.med";
309 f1=MEDLoaderDataForTest.buildVecFieldOnGauss_1();
310 MEDLoader.MEDLoader.WriteField(fileName,f1,True);
311 f2=MEDLoader.MEDLoader.ReadField(MEDLoader.ON_GAUSS_PT,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
312 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
315 def testFieldGaussNERW1(self):
316 fileName="Pyfile14.med";
317 f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
318 MEDLoader.MEDLoader.WriteField(fileName,f1,True);
319 self.assertEqual([MEDLoader.ON_GAUSS_NE],MEDLoader.MEDLoader.GetTypesOfField(fileName,'2DMesh_2','MyFieldOnGaussNE')) #Bug 22/5/2014
320 f2=MEDLoader.MEDLoader.ReadField(MEDLoader.ON_GAUSS_NE,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
321 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
324 def testMesh3DSurfShuffleRW(self):
325 fileName="Pyfile15.med";
326 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
327 renumber1=[2,5,1,0,3,4]
328 mesh.renumberCells(renumber1,False);
329 mesh.checkCoherency();
330 MEDLoader.MEDLoader.WriteUMesh(fileName,mesh,True);
331 mesh_rw=MEDLoader.MEDLoader.ReadUMeshFromFile(fileName,mesh.getName(),0);
332 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
335 def testMultiFieldShuffleRW1(self):
336 fileName="Pyfile17.med";
337 m=MEDLoaderDataForTest.build3DMesh_2();
338 self.assertEqual(20,m.getNumberOfCells());
339 self.assertEqual(45,m.getNumberOfNodes());
341 m.convertToPolyTypes(polys);
342 renum=[1,3,2,8,9,12,13,16,19,0,4,7,5,15,14,17,10,18,6,11]
343 m.renumberCells(renum,False);
344 m.orientCorrectlyPolyhedrons();
346 MEDLoader.MEDLoader.WriteUMesh(fileName,m,True);
347 f1Tmp=m.getMeasureField(False);
348 f1=f1Tmp.buildNewTimeReprFromThis(MEDLoader.ONE_TIME,False);
350 f_1=f1.cloneWithMesh(True);
351 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
353 f1.setTime(0.01,3,4);
354 f_2=f1.cloneWithMesh(True);
355 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
356 f1.applyFunc("2*x/3");
357 f1.setTime(0.02,5,6);
358 f_3=f1.cloneWithMesh(True);
359 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
361 its=[(1,2),(3,4),(5,6)];
362 fs=MEDLoader.MEDLoader.ReadFieldsOnSameMesh(MEDLoader.ON_CELLS,fileName,f_1.getMesh().getName(),0,f_1.getName(),its);
363 self.assertEqual(3,len(fs));
364 self.assertTrue(fs[0].isEqual(f_1,1e-12,1e-12));
365 self.assertTrue(fs[1].isEqual(f_2,1e-12,1e-12));
366 self.assertTrue(fs[2].isEqual(f_3,1e-12,1e-12));
369 def testWriteUMeshesRW1(self):
370 fileName="Pyfile18.med";
371 m3d=MEDLoaderDataForTest.build3DMesh_2();
374 nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
375 m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
377 m2d.renumberCells(renumber,False);
378 m2d.setName("ExampleOfMultiDimW");
380 MEDLoader.MEDLoader.WriteUMeshes(fileName,meshes,True);
381 m3d_bis=MEDLoader.MEDLoader.ReadUMeshFromFile(fileName,m2d.getName(),0);
382 self.assertTrue(not m3d_bis.isEqual(m3d,1e-12));
383 m3d_bis.setName(m3d.getName());
384 self.assertTrue(m3d_bis.isEqual(m3d,1e-12));
385 m2d_bis=MEDLoader.MEDLoader.ReadUMeshFromFile(fileName,m2d.getName(),-1);#-1 for faces
386 self.assertTrue(m2d_bis.isEqual(m2d,1e-12));
387 # Creation of a field on faces.
388 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
389 f1.setName("FieldOnFacesShuffle");
391 array=MEDLoader.DataArrayDouble.New();
392 arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
393 array.setValues(arr1,m2d.getNumberOfCells(),2);
394 array.setInfoOnComponent(0,"plkj [mm]");
395 array.setInfoOnComponent(1,"pqqqss [mm]");
397 tmp=array.setValues(arr1,m2d.getNumberOfCells(),2);
398 f1.setTime(3.14,2,7);
400 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
401 f2=MEDLoader.MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),-1,f1.getName(),2,7);
402 self.assertTrue(f2.isEqual(f1,1e-12,1e-12));
405 def testFieldNodeProfilRW1(self):
406 fileName="Pyfile19.med";
407 fileName2="Pyfile20.med";
408 m=MEDLoaderDataForTest.build2DMesh_1();
409 nbOfNodes=m.getNumberOfNodes();
410 MEDLoader.MEDLoader.WriteUMesh(fileName,m,True);
411 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
412 f1.setName("VFieldOnNodes");
414 array=MEDLoader.DataArrayDouble.New();
415 arr1=[1.,101.,2.,102.,3.,103.,4.,104.,5.,105.,6.,106.,7.,107.,8.,108.,9.,109.,10.,110.,11.,111.,12.,112.]
416 array.setValues(arr1,nbOfNodes,2);
418 array.setInfoOnComponent(0,"tyty [mm]");
419 array.setInfoOnComponent(1,"uiop [MW]");
420 f1.setTime(3.14,2,7);
423 f2=f1.buildSubPart(arr2);
424 f2.getMesh().setName(f1.getMesh().getName());
425 MEDLoader.MEDLoader.WriteField(fileName,f2,False);#<- False important for the test
427 f3=MEDLoader.MEDLoader.ReadFieldNode(fileName,f2.getMesh().getName(),0,f2.getName(),2,7);
429 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
432 f2.renumberNodes(arr3);
433 MEDLoader.MEDLoader.WriteUMesh(fileName2,m,True);
434 MEDLoader.MEDLoader.WriteField(fileName2,f2,False);#<- False important for the test
435 f3=MEDLoader.MEDLoader.ReadFieldNode(fileName2,f2.getMesh().getName(),0,f2.getName(),2,7);
437 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
441 def testFieldNodeProfilRW2(self):
442 fileName="Pyfile23.med";
443 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
444 MEDLoader.MEDLoader.WriteUMesh(fileName,mesh,True);
446 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
447 f1.setName("FieldMix");
449 arr2=[1071.,1171.,1010.,1110.,1020.,1120.,1030.,1130.,1040.,1140.,1050.,1150.,
450 1060.,1160.,1070.,1170.,1080.,1180.,1090.,1190.,1091.,1191.,1092.,1192.];
451 array=MEDLoader.DataArrayDouble.New();
452 array.setValues(arr2,12,2);
454 array.setInfoOnComponent(0,"plkj [mm]");
455 array.setInfoOnComponent(1,"pqqqss [mm]");
456 tmp=array.getPointer();
457 f1.setTime(3.17,2,7);
459 renumArr=[3,7,2,1,5,11,10,0,9,6,8,4]
460 f1.renumberNodes(renumArr);
462 MEDLoader.MEDLoader.WriteField(fileName,f1,False);#<- False important for the test
463 f2=MEDLoader.MEDLoader.ReadFieldNode(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
464 self.assertTrue(f2.isEqual(f1,1e-12,1e-12));
468 def testMixCellAndNodesFieldRW1(self):
469 fileName="Pyfile21.med";
470 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
471 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
472 f1.setName("FieldMix");
474 array=MEDLoader.DataArrayDouble.New();
476 arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.,50.,150.]
477 array.setValues(arr1,6,2);
478 array.setInfoOnComponent(0,"plkj [mm]");
479 array.setInfoOnComponent(1,"pqqqss [mm]");
480 f1.setTime(3.14,2,7);
483 f2=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
484 f2.setName("FieldMix");
486 array=MEDLoader.DataArrayDouble.New();
488 arr2=[1071.,1171.,1010.,1110.,1020.,1120.,1030.,1130.,1040.,1140.,1050.,1150.,
489 1060.,1160.,1070.,1170.,1080.,1180.,1090.,1190.,1091.,1191.,1092.,1192.]
490 array.setValues(arr2,12,2)
491 array.setInfoOnComponent(0,"plkj [mm]");
492 array.setInfoOnComponent(1,"pqqqss [mm]");
493 f2.setTime(3.14,2,7);
496 MEDLoader.MEDLoader.WriteField(fileName,f1,True);
497 ts=MEDLoader.MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
498 self.assertEqual(1,len(ts));
499 self.assertEqual(MEDLoader.ON_CELLS,ts[0]);
500 fs=MEDLoader.MEDLoader.GetAllFieldNamesOnMesh(fileName,f1.getMesh().getName());
501 self.assertEqual(1,len(fs));
502 self.assertTrue(fs[0]=="FieldMix");
503 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f2);
504 fs=MEDLoader.MEDLoader.GetAllFieldNamesOnMesh(fileName,f1.getMesh().getName());
505 self.assertEqual(1,len(fs));
506 self.assertTrue(fs[0]=="FieldMix");
508 ts=MEDLoader.MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
509 self.assertEqual(2,len(ts));
510 self.assertEqual(MEDLoader.ON_NODES,ts[0]);
511 self.assertEqual(MEDLoader.ON_CELLS,ts[1]);
513 f3=MEDLoader.MEDLoader.ReadFieldNode(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
514 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
515 f3=MEDLoader.MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
516 self.assertTrue(f3.isEqual(f1,1e-12,1e-12));
520 def testGetAllFieldNamesRW1(self):
521 fileName="Pyfile22.med";
522 mesh=MEDLoaderDataForTest.build2DMesh_2();
523 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
524 f1.setName("Field1");
525 f1.setTime(3.44,5,6);
527 f1.fillFromAnalytic(2,"x+y");
528 MEDLoader.MEDLoader.WriteField(fileName,f1,True);
529 f1.setTime(1002.3,7,8);
530 f1.fillFromAnalytic(2,"x+77.*y");
531 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
532 f1.setName("Field2");
533 MEDLoader.MEDLoader.WriteField(fileName,f1,False);
534 f1.setName("Field3");
535 mesh.setName("2DMesh_2Bis");
536 MEDLoader.MEDLoader.WriteField(fileName,f1,False);
537 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
538 f1.setName("Field8");
539 f1.setTime(8.99,7,9);
541 f1.fillFromAnalytic(3,"3*x+y");
542 MEDLoader.MEDLoader.WriteField(fileName,f1,False);
543 fs=MEDLoader.MEDLoader.GetAllFieldNames(fileName);
544 self.assertEqual(4,len(fs));
545 self.assertTrue(fs[0]=="Field1");
546 self.assertTrue(fs[1]=="Field2");
547 self.assertTrue(fs[2]=="Field3");
548 self.assertTrue(fs[3]=="Field8");
551 def testBigNbOfCompoNonReg(self):
552 fileName="Pyfile57.med"
553 m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(MEDLoader.DataArrayDouble([0,1,2,3]),MEDLoader.DataArrayDouble([0,1]),MEDLoader.DataArrayDouble([0,1]))
554 m=m.buildUnstructured() ; m.setName("TinyMesh")
555 f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS) ; f.setMesh(m)
557 arr=MEDLoader.DataArrayDouble(nbOfCompo*3) ; arr.iota()
558 arr.rearrange(nbOfCompo)
559 arr.setInfoOnComponents(["c%i"%(i) for i in xrange(nbOfCompo)])
561 f.setName("FieldBigCompo")
562 MEDLoader.MEDLoader.WriteField(fileName,f,True)
563 f2=MEDLoader.MEDLoader.ReadFieldCell(fileName,m.getName(),0,f.getName(),-1,-1)
564 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
567 def testMultiMeshTypeWrite0(self):
569 m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
570 m.insertNextCell([0,2,1,3])
571 m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
573 ms=[m.deepCpy() for i in xrange(4)]
574 for i,elt in enumerate(ms):
575 elt.translate([float(i)*1.5,0.])
578 m0=MEDLoader.MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms)
579 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
580 MEDLoader.MEDLoader.WriteField(fname,f,True)
582 fRead=MEDLoader.MEDLoader.ReadFieldCell(fname,"merge",0,f.getName(),-1,-1)
583 fRead.setMesh(MEDLoader.MEDCoupling1SGTUMesh(fRead.getMesh()))
584 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
586 m0=m0.buildUnstructured() ; m0.convertAllToPoly()
587 m0=MEDLoader.MEDCoupling1DGTUMesh(m0)
588 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
589 MEDLoader.MEDLoader.WriteField(fname,f,True)
591 fRead=MEDLoader.MEDLoader.ReadFieldCell(fname,"merge",0,f.getName(),-1,-1)
592 fRead.setMesh(MEDLoader.MEDCoupling1DGTUMesh(fRead.getMesh()))
593 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
595 m0=MEDLoader.MEDCouplingCMesh()
596 arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
597 m0.setCoords(arr,arr)
599 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
600 MEDLoader.MEDLoader.WriteField(fname,f,True)
602 fRead=MEDLoader.MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
603 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
605 c=m0.buildUnstructured().getCoords()
606 m0=MEDLoader.MEDCouplingCurveLinearMesh("mesh")
607 m0.setNodeGridStructure([4,4])
609 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
610 MEDLoader.MEDLoader.WriteField(fname,f,True)
612 fRead=MEDLoader.MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
613 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
616 def testMultiMeshTypeWrite1(self):
618 m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
619 m.insertNextCell([0,2,1,3])
620 m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
622 ms=[m.deepCpy() for i in xrange(4)]
623 for i,elt in enumerate(ms):
624 elt.translate([float(i)*1.5,0.])
626 m0=MEDLoader.MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms)
627 MEDLoader.MEDLoader.WriteMesh(fname,m0,True)
629 mRead=MEDLoader.MEDLoader.ReadMeshFromFile(fname,"merge",0)
630 self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingUMesh))
631 mRead=MEDLoader.MEDCoupling1SGTUMesh(mRead)
632 self.assertTrue(m0.isEqual(mRead,1e-12))
634 m0=m0.buildUnstructured() ; m0.convertAllToPoly()
635 m0=MEDLoader.MEDCoupling1DGTUMesh(m0)
636 MEDLoader.MEDLoader.WriteMesh(fname,m0,True)
638 mRead=MEDLoader.MEDLoader.ReadMeshFromFile(fname,"merge",0)
639 mRead=MEDLoader.MEDCoupling1DGTUMesh(mRead)
640 self.assertTrue(m0.isEqual(mRead,1e-12))
642 m0=MEDLoader.MEDCouplingCMesh()
643 arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
644 m0.setCoords(arr,arr)
646 MEDLoader.MEDLoader.WriteMesh(fname,m0,True)
648 mRead=MEDLoader.MEDLoader.ReadMeshFromFile(fname,0)
649 self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingCMesh))
650 self.assertTrue(m0.isEqual(mRead,1e-12))
652 c=m0.buildUnstructured().getCoords()
653 m0=MEDLoader.MEDCouplingCurveLinearMesh("mesh")
654 m0.setNodeGridStructure([4,4])
656 MEDLoader.MEDLoader.WriteMesh(fname,m0,True)
658 mRead=MEDLoader.MEDLoader.ReadMeshFromFile(fname,0)
659 self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingCurveLinearMesh))
660 self.assertTrue(m0.isEqual(mRead,1e-12))
663 def testChangeGroupName(self):
664 """ This test is a non regression test on MEDFileUMesh.changeGroupName thanks to Alliance.
666 mfd=MEDLoaderDataForTest.buildAMEDFileDataWithGroupOnOneFamilyForSauv()
667 mesh = mfd.getMeshes().getMeshAtPos(0)
668 mesh.changeGroupName("grp0_LM1", "xonall1")
669 self.assertTrue("xonall1" in mesh.getGroupsNames())
672 def testFieldWithTooLongName(self):
673 """ This test is a non regression test, to check that in basic API the policies are taken into account.
677 coords = [0.,0., 0.,1., 1.,1., 1.,0.]
681 m=MEDLoader.MEDCouplingUMesh.New("mesh",2)
683 m.insertNextCell(MEDLoader.NORM_QUAD4,4,conn2D)
684 m.finishInsertingCells()
685 # assigning coordinates
686 meshCoords=MEDLoader.DataArrayDouble.New()
687 meshCoords.setValues(coords, 4, 2)
688 m.setCoords(meshCoords)
690 f=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME)
692 d=MEDLoader.DataArrayDouble.New()
696 d.setInfoOnComponent(0,"CONCENTRATION of I129")
700 mm=MEDLoader.MEDFileUMesh()
701 MEDLoader.MEDLoader.SetTooLongStrPolicy(2)
702 MEDLoader.MEDLoader.AssignStaticWritePropertiesTo(mm)
703 self.assertEqual(2,mm.getTooLongStrPolicy())
704 MEDLoader.MEDLoader.SetTooLongStrPolicy(0)
705 MEDLoader.MEDLoader.AssignStaticWritePropertiesTo(mm)
706 self.assertEqual(0,mm.getTooLongStrPolicy())
709 MEDLoader.MEDLoader.SetTooLongStrPolicy(2)
710 self.assertRaises(MEDLoader.InterpKernelException,MEDLoader.MEDLoader.WriteField,fname,f,True)# the component name is too long + policy 2 -> throw
711 f.getArray().setInfoOnComponent(0,'I129')
712 MEDLoader.MEDLoader.WriteField(fname,f,True)
715 def testUsingAlreadyWrittenMesh2(self):
716 """ This test focuses on MEDLoader.WriteFieldUsingAlreadyWrittenMesh with mesh different from UMesh.
719 mesh=MEDLoader.MEDCouplingCMesh("mesh")
720 arrX=MEDLoader.DataArrayDouble([0,1,2,3])
721 arrY=MEDLoader.DataArrayDouble([0,2,3,5,7])
722 arrZ=MEDLoader.DataArrayDouble([7])
723 mesh.setCoords(arrX,arrY,arrZ)
725 f1=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_NODES) ; f1.setName("f1")
727 arr=MEDLoader.DataArrayDouble(20) ; arr.iota()
731 f2=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_NODES) ; f2.setName("f2")
733 arr=MEDLoader.DataArrayDouble(20) ; arr.iota() ; arr*=3
737 f11=f1.deepCpy() ; (f11.getArray())[:]*=4 ; f11.setTime(1.1,5,6)
739 MEDLoader.MEDLoader.WriteMesh(fname,f1.getMesh(),True)
740 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f1)
741 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
742 MEDLoader.MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f11)
744 f1r=MEDLoader.MEDLoader.ReadFieldNode(fname,"mesh",0,"f1",-1,-1);
745 self.assertTrue(f1.isEqual(f1r,1e-12,1e-12))
746 self.assertTrue(f1r.getArray().isEqual(MEDLoader.DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.]),1e-12))
747 f2r=MEDLoader.MEDLoader.ReadFieldNode(fname,"mesh",0,"f2",-1,-1);
748 self.assertTrue(f2.isEqual(f2r,1e-12,1e-12))
749 self.assertTrue(f2r.getArray().isEqual(MEDLoader.DataArrayDouble([0.,3.,6.,9.,12.,15.,18.,21.,24.,27.,30.,33.,36.,39.,42.,45.,48.,51.,54.,57.]),1e-12))
750 f3r=MEDLoader.MEDLoader.ReadFieldNode(fname,"mesh",0,"f1",5,6);
751 self.assertTrue(f11.isEqual(f3r,1e-12,1e-12))
752 self.assertTrue(f3r.getArray().isEqual(MEDLoader.DataArrayDouble([0.,4.,8.,12.,16.,20.,24.,28.,32.,36.,40.,44.,48.,52.,56.,60.,64.,68.,72.,76.]),1e-12))
756 if __name__ == "__main__":