1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2020 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,WriteInTmpDir
26 from MEDLoaderDataForTest import GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 class MEDLoaderTest1(unittest.TestCase):
30 def testMesh1DRW(self):
31 mesh=MEDLoaderDataForTest.build1DMesh_1();
32 mesh.checkConsistencyLight();
33 MEDLoader.WriteUMesh("Pyfile1.med",mesh,True);
34 mesh_rw=MEDLoader.ReadUMeshFromFile("Pyfile1.med",mesh.getName(),0);
35 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
39 def testMesh2DCurveRW(self):
40 mesh=MEDLoaderDataForTest.build2DCurveMesh_1();
41 mesh.checkConsistencyLight();
42 MEDLoader.WriteUMesh("Pyfile2.med",mesh,True);
43 mesh_rw=MEDLoader.ReadUMeshFromFile("Pyfile2.med",mesh.getName(),0);
44 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
48 def testMesh2DRW(self):
49 mesh=MEDLoaderDataForTest.build2DMesh_1();
50 mesh.checkConsistencyLight();
51 MEDLoader.WriteUMesh("Pyfile3.med",mesh,True);
52 mesh_rw=MEDLoader.ReadUMeshFromFile("Pyfile3.med",mesh.getName(),0);
53 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
57 def testMesh3DSurfRW(self):
58 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
59 mesh.checkConsistencyLight();
60 MEDLoader.WriteUMesh("Pyfile4.med",mesh,True);
61 mesh_rw=MEDLoader.ReadUMeshFromFile("Pyfile4.med",mesh.getName(),0);
62 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
66 def testMesh3DRW(self):
67 mesh=MEDLoaderDataForTest.build3DMesh_1();
68 mesh.checkConsistencyLight();
69 MEDLoader.WriteUMesh("Pyfile5.med",mesh,True);
70 mesh_rw=MEDLoader.ReadUMeshFromFile("Pyfile5.med",mesh.getName(),0);
71 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
75 def testFieldRW1(self):
80 def testFieldRW2(self):
81 fileName="Pyfile8.med";
84 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
85 f1_int=MEDLoaderDataForTest.buildIntVecFieldOnCells_1();
86 f1_fl=MEDLoaderDataForTest.buildFloatVecFieldOnCells_1();
87 MEDLoader.WriteField(fileName,f1,True);
89 f1_int.setTime(10.,8,9);
90 f1_fl.setTime(10.,8,9);
91 f1.getArray().setIJ(0,0,VAL1);
92 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
93 f1.setTime(10.14,18,19);
94 f1.getArray().setIJ(0,0,VAL2);
95 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
96 # Write int and float fields:
97 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1_int);
98 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1_fl);
99 #retrieving time steps...
100 f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),8,9);
102 f1.getArray().setIJ(0,0,VAL1);
103 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
104 f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),0,1);
105 f3=MEDLoaderDataForTest.buildVecFieldOnCells_1();
106 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
107 f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),18,19);
108 f1.setTime(10.14,18,19);
109 f1.getArray().setIJ(0,0,VAL2);
110 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
111 #test of throw on invalid (dt,it)
112 self.assertRaises(Exception,MEDLoader.ReadFieldCell,fileName,f1.getMesh().getName(),0,f1.getName(),28,19);
113 # Reading Int and Float fields:
114 f2_int=MEDLoader.ReadFieldCell(fileName,f1_int.getMesh().getName(),0,f1_int.getName(),8,9);
115 self.assertTrue(f1_int.isEqual(f2_int,1e-12,0)); # exact comparison here
116 f2_fl=MEDLoader.ReadFieldCell(fileName,f1_fl.getMesh().getName(),0,f1_fl.getName(),8,9);
117 self.assertTrue(f1_fl.isEqual(f2_fl,1e-12,1e-7)); # float comparison here
119 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
120 fileName2="Pyfile9.med";
121 MEDLoader.WriteField(fileName2,f1,True);
122 f1.setTime(110.,108,109);
123 tmp=f1.getArray().getPointer();
124 f1.getArray().setIJ(0,3,VAL1);
125 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName2,f1);
126 f1.setTime(210.,208,209);
127 f1.getArray().setIJ(0,3,VAL2);
128 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName2,f1);
129 f2=MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),108,109);
130 f1.setTime(110.,108,109);
131 f1.getArray().setIJ(0,3,VAL1);
132 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
133 f2=MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),2,3);
134 f3=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
135 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
136 f2=MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),208,209);
137 f1.setTime(210.,208,209);
138 f1.getArray().setIJ(0,3,VAL2);
139 self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
143 # Multi field in a same file, but this field has several
146 def testFieldRW3(self):
147 fileName="Pyfile11.med";
149 VAL2=-1111111111111.;
152 f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
153 f1.getMesh().setName(name3);
156 tmp=f1.getArray().getPointer();
157 f1.getArray().setIJ(0,0,VAL1);
158 MEDLoader.WriteField(fileName,f1,True);
159 f1.setTime(10.14,18,19);
160 f1.getArray().setIJ(0,0,VAL2);
161 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
162 f1.getMesh().setName(name3);
163 f1.setTime(10.55,28,29);
164 f1.getArray().setIJ(0,0,3*VAL1);
165 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
166 vec=MEDLoader.GetMeshNamesOnField(fileName,name1);
167 f1.setTime(10.66,38,39);
168 f1.getArray().setIJ(0,0,3*VAL2);
169 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
170 f1.setTime(10.77,48,49);
171 f1.getArray().setIJ(0,0,4*VAL2);
172 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
174 f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
176 f1.getMesh().setName(name3);
177 f1.setTime(110.,8,9);
178 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
179 f1.setTime(110.,108,109);
180 tmp=f1.getArray().getPointer();
181 f1.getArray().setIJ(0,3,VAL1);
182 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
183 f1.setTime(210.,208,209);
184 f1.getArray().setIJ(0,3,VAL2);
185 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
187 it1=MEDLoader.GetCellFieldIterations(fileName,name3,name1);
188 self.assertEqual(5,len(it1));
189 self.assertEqual(8,it1[0][0]); self.assertEqual(9,it1[0][1]);
190 self.assertEqual(18,it1[1][0]); self.assertEqual(19,it1[1][1]);
191 self.assertEqual(28,it1[2][0]); self.assertEqual(29,it1[2][1]);
192 self.assertEqual(38,it1[3][0]); self.assertEqual(39,it1[3][1]);
193 self.assertEqual(48,it1[4][0]); self.assertEqual(49,it1[4][1]);
194 it3=MEDLoader.GetNodeFieldIterations(fileName,name3,name1);
195 self.assertEqual(3,len(it3));
196 self.assertEqual(8,it3[0][0]); self.assertEqual(9,it3[0][1]);
197 self.assertEqual(108,it3[1][0]); self.assertEqual(109,it3[1][1]);
198 self.assertEqual(208,it3[2][0]); self.assertEqual(209,it3[2][1]);
201 f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,8,9);
202 self.assertAlmostEqual(VAL1,f1.getArray().getIJ(0,0),13);
203 f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,18,19);
204 self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,0),13);
205 f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,28,29);
206 self.assertAlmostEqual(3*VAL1,f1.getArray().getIJ(0,0),13);
207 f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,38,39);
208 self.assertAlmostEqual(3*VAL2,f1.getArray().getIJ(0,0),13);
209 f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,48,49);
210 self.assertAlmostEqual(4*VAL2,f1.getArray().getIJ(0,0),13);
212 f1=MEDLoader.ReadFieldNode(fileName,name3,0,name1,8,9);
213 self.assertAlmostEqual(71.,f1.getArray().getIJ(0,3),13);
214 f1=MEDLoader.ReadFieldNode(fileName,name3,0,name1,108,109);
215 self.assertAlmostEqual(VAL1,f1.getArray().getIJ(0,3),13);
216 f1=MEDLoader.ReadFieldNode(fileName,name3,0,name1,208,209);
217 self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,3),13);
221 def testMultiMeshRW1(self):
222 GeneratePyfile10(self)
226 def testFieldProfilRW1(self):
227 GeneratePyfile12(self)
232 def testFieldGaussRW1(self):
233 GeneratePyfile13(self)
237 def testFieldGaussNERW1(self):
238 GeneratePyfile14(self)
242 def testMesh3DSurfShuffleRW(self):
243 fileName="Pyfile15.med";
244 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
245 renumber1=[2,5,1,0,3,4]
246 mesh.renumberCells(renumber1,False);
247 mesh.checkConsistencyLight();
248 MEDLoader.WriteUMesh(fileName,mesh,True);
249 mesh_rw=MEDLoader.ReadUMeshFromFile(fileName,mesh.getName(),0);
250 self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
254 def testMultiFieldShuffleRW1(self):
255 fileName="Pyfile17.med";
256 m=MEDLoaderDataForTest.build3DMesh_2();
257 self.assertEqual(20,m.getNumberOfCells());
258 self.assertEqual(45,m.getNumberOfNodes());
260 m.convertToPolyTypes(polys);
261 renum=[1,3,2,8,9,12,13,16,19,0,4,7,5,15,14,17,10,18,6,11]
262 m.renumberCells(renum,False);
263 m.orientCorrectlyPolyhedrons();
265 MEDLoader.WriteUMesh(fileName,m,True);
266 f1Tmp=m.getMeasureField(False);
267 f1=f1Tmp.buildNewTimeReprFromThis(MEDLoader.ONE_TIME,False);
269 f_1=f1.cloneWithMesh(True);
270 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
272 f1.setTime(0.01,3,4);
273 f_2=f1.cloneWithMesh(True);
274 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
275 f1.applyFunc("2*x/3");
276 f1.setTime(0.02,5,6);
277 f_3=f1.cloneWithMesh(True);
278 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
280 its=[(1,2),(3,4),(5,6)];
281 fs=MEDLoader.ReadFieldsOnSameMesh(MEDLoader.ON_CELLS,fileName,f_1.getMesh().getName(),0,f_1.getName(),its);
282 self.assertEqual(3,len(fs));
283 self.assertTrue(fs[0].isEqual(f_1,1e-12,1e-12));
284 self.assertTrue(fs[1].isEqual(f_2,1e-12,1e-12));
285 self.assertTrue(fs[2].isEqual(f_3,1e-12,1e-12));
289 def testWriteUMeshesRW1(self):
290 GeneratePyfile18(self)
294 def testFieldNodeProfilRW1(self):
295 GeneratePyfile19(self)
299 def testFieldNodeProfilRW2(self):
300 fileName="Pyfile23.med";
301 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
302 MEDLoader.WriteUMesh(fileName,mesh,True);
304 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
305 f1.setName("FieldMix");
307 arr2=[1071.,1171.,1010.,1110.,1020.,1120.,1030.,1130.,1040.,1140.,1050.,1150.,
308 1060.,1160.,1070.,1170.,1080.,1180.,1090.,1190.,1091.,1191.,1092.,1192.];
309 array=MEDLoader.DataArrayDouble.New();
310 array.setValues(arr2,12,2);
312 array.setInfoOnComponent(0,"plkj [mm]");
313 array.setInfoOnComponent(1,"pqqqss [mm]");
314 tmp=array.getPointer();
315 f1.setTime(3.17,2,7);
317 renumArr=[3,7,2,1,5,11,10,0,9,6,8,4]
318 f1.renumberNodes(renumArr);
319 f1.checkConsistencyLight();
320 MEDLoader.WriteField(fileName,f1,False);#<- False important for the test
321 f2=MEDLoader.ReadFieldNode(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
322 self.assertTrue(f2.isEqual(f1,1e-12,1e-12));
327 def testMixCellAndNodesFieldRW1(self):
328 fileName="Pyfile21.med";
329 mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
330 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
331 f1.setName("FieldMix");
333 array=MEDLoader.DataArrayDouble.New();
335 arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.,50.,150.]
336 array.setValues(arr1,6,2);
337 array.setInfoOnComponent(0,"plkj [mm]");
338 array.setInfoOnComponent(1,"pqqqss [mm]");
339 f1.setTime(3.14,2,7);
340 f1.checkConsistencyLight();
342 f2=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
343 f2.setName("FieldMix");
345 array=MEDLoader.DataArrayDouble.New();
347 arr2=[1071.,1171.,1010.,1110.,1020.,1120.,1030.,1130.,1040.,1140.,1050.,1150.,
348 1060.,1160.,1070.,1170.,1080.,1180.,1090.,1190.,1091.,1191.,1092.,1192.]
349 array.setValues(arr2,12,2)
350 array.setInfoOnComponent(0,"plkj [mm]");
351 array.setInfoOnComponent(1,"pqqqss [mm]");
352 f2.setTime(3.14,2,7);
353 f2.checkConsistencyLight();
355 MEDLoader.WriteField(fileName,f1,True);
356 ts=MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
357 self.assertEqual(1,len(ts));
358 self.assertEqual(MEDLoader.ON_CELLS,ts[0]);
359 fs=MEDLoader.GetAllFieldNamesOnMesh(fileName,f1.getMesh().getName());
360 self.assertEqual(1,len(fs));
361 self.assertTrue(fs[0]=="FieldMix");
362 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f2);
363 fs=MEDLoader.GetAllFieldNamesOnMesh(fileName,f1.getMesh().getName());
364 self.assertEqual(1,len(fs));
365 self.assertTrue(fs[0]=="FieldMix");
367 ts=MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
368 self.assertEqual(2,len(ts));
369 self.assertEqual(MEDLoader.ON_NODES,ts[0]);
370 self.assertEqual(MEDLoader.ON_CELLS,ts[1]);
372 f3=MEDLoader.ReadFieldNode(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
373 self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
374 f3=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
375 self.assertTrue(f3.isEqual(f1,1e-12,1e-12));
380 def testGetAllFieldNamesRW1(self):
381 fileName="Pyfile22.med";
382 mesh=MEDLoaderDataForTest.build2DMesh_2();
383 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
384 f1.setName("Field1");
385 f1.setTime(3.44,5,6);
387 f1.fillFromAnalytic(2,"x+y");
388 MEDLoader.WriteField(fileName,f1,True);
389 f1.setTime(1002.3,7,8);
390 f1.fillFromAnalytic(2,"x+77.*y");
391 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
392 f1.setName("Field2");
393 MEDLoader.WriteField(fileName,f1,False);
394 f1.setName("Field3");
395 mesh.setName("2DMesh_2Bis");
396 MEDLoader.WriteField(fileName,f1,False);
397 f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
398 f1.setName("Field8");
399 f1.setTime(8.99,7,9);
401 f1.fillFromAnalytic(3,"3*x+y");
402 MEDLoader.WriteField(fileName,f1,False);
403 fs=MEDLoader.GetAllFieldNames(fileName);
404 self.assertEqual(4,len(fs));
405 self.assertTrue(fs[0]=="Field1");
406 self.assertTrue(fs[1]=="Field2");
407 self.assertTrue(fs[2]=="Field3");
408 self.assertTrue(fs[3]=="Field8");
412 def testBigNbOfCompoNonReg(self):
413 fileName="Pyfile57.med"
414 m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(MEDLoader.DataArrayDouble([0,1,2,3]),MEDLoader.DataArrayDouble([0,1]),MEDLoader.DataArrayDouble([0,1]))
415 m=m.buildUnstructured() ; m.setName("TinyMesh")
416 f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS) ; f.setMesh(m)
418 arr=MEDLoader.DataArrayDouble(nbOfCompo*3) ; arr.iota()
419 arr.rearrange(nbOfCompo)
420 arr.setInfoOnComponents(["c%i" % (i) for i in range(nbOfCompo)])
422 f.setName("FieldBigCompo")
423 MEDLoader.WriteField(fileName,f,True)
424 f2=MEDLoader.ReadFieldCell(fileName,m.getName(),0,f.getName(),-1,-1)
425 self.assertTrue(f.isEqual(f2,1e-12,1e-12))
429 def testMultiMeshTypeWrite0(self):
431 m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
432 m.insertNextCell([0,2,1,3])
433 m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
435 ms = [m.deepCopy() for i in range(4)]
436 for i,elt in enumerate(ms):
437 elt.translate([float(i)*1.5,0.])
440 m0=MEDLoader.MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms)
441 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
442 MEDLoader.WriteField(fname,f,True)
444 fRead=MEDLoader.ReadFieldCell(fname,"merge",0,f.getName(),-1,-1)
445 fRead.setMesh(MEDLoader.MEDCoupling1SGTUMesh(fRead.getMesh()))
446 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
448 m0=m0.buildUnstructured() ; m0.convertAllToPoly()
449 m0=MEDLoader.MEDCoupling1DGTUMesh(m0)
450 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
451 MEDLoader.WriteField(fname,f,True)
453 fRead=MEDLoader.ReadFieldCell(fname,"merge",0,f.getName(),-1,-1)
454 fRead.setMesh(MEDLoader.MEDCoupling1DGTUMesh(fRead.getMesh()))
455 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
457 m0=MEDLoader.MEDCouplingCMesh()
458 arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
459 m0.setCoords(arr,arr)
461 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
462 MEDLoader.WriteField(fname,f,True)
464 fRead=MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
465 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
467 c=m0.buildUnstructured().getCoords()
468 m0=MEDLoader.MEDCouplingCurveLinearMesh("mesh")
469 m0.setNodeGridStructure([4,4])
471 f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
472 MEDLoader.WriteField(fname,f,True)
474 fRead=MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
475 self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
479 def testMultiMeshTypeWrite1(self):
481 m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
482 m.insertNextCell([0,2,1,3])
483 m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
485 ms = [m.deepCopy() for i in range(4)]
486 for i,elt in enumerate(ms):
487 elt.translate([float(i)*1.5,0.])
489 m0=MEDLoader.MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms)
490 MEDLoader.WriteMesh(fname,m0,True)
492 mRead=MEDLoader.ReadMeshFromFile(fname,"merge",0)
493 self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingUMesh))
494 mRead=MEDLoader.MEDCoupling1SGTUMesh(mRead)
495 self.assertTrue(m0.isEqual(mRead,1e-12))
497 m0=m0.buildUnstructured() ; m0.convertAllToPoly()
498 m0=MEDLoader.MEDCoupling1DGTUMesh(m0)
499 MEDLoader.WriteMesh(fname,m0,True)
501 mRead=MEDLoader.ReadMeshFromFile(fname,"merge",0)
502 mRead=MEDLoader.MEDCoupling1DGTUMesh(mRead)
503 self.assertTrue(m0.isEqual(mRead,1e-12))
505 m0=MEDLoader.MEDCouplingCMesh()
506 arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
507 m0.setCoords(arr,arr)
509 MEDLoader.WriteMesh(fname,m0,True)
511 mRead=MEDLoader.ReadMeshFromFile(fname,0)
512 self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingCMesh))
513 self.assertTrue(m0.isEqual(mRead,1e-12))
515 c=m0.buildUnstructured().getCoords()
516 m0=MEDLoader.MEDCouplingCurveLinearMesh("mesh")
517 m0.setNodeGridStructure([4,4])
519 MEDLoader.WriteMesh(fname,m0,True)
521 mRead=MEDLoader.ReadMeshFromFile(fname,0)
522 self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingCurveLinearMesh))
523 self.assertTrue(m0.isEqual(mRead,1e-12))
527 def testChangeGroupName(self):
528 """ This test is a non regression test on MEDFileUMesh.changeGroupName thanks to Alliance.
530 mfd=MEDLoaderDataForTest.buildAMEDFileDataWithGroupOnOneFamilyForSauv()
531 mesh = mfd.getMeshes().getMeshAtPos(0)
532 mesh.changeGroupName("grp0_LM1", "xonall1")
533 self.assertTrue("xonall1" in mesh.getGroupsNames())
537 def testFieldWithTooLongName(self):
538 """ This test is a non regression test, to check that in basic API the policies are taken into account.
542 coords = [0.,0., 0.,1., 1.,1., 1.,0.]
546 m=MEDLoader.MEDCouplingUMesh.New("mesh",2)
548 m.insertNextCell(MEDLoader.NORM_QUAD4,4,conn2D)
549 m.finishInsertingCells()
550 # assigning coordinates
551 meshCoords=MEDLoader.DataArrayDouble.New()
552 meshCoords.setValues(coords, 4, 2)
553 m.setCoords(meshCoords)
555 f=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME)
557 d=MEDLoader.DataArrayDouble.New()
560 # setting a long name
561 d.setInfoOnComponent(0,"CONCENTRATION of I129")
565 mm=MEDLoader.MEDFileUMesh()
566 MEDLoader.SetTooLongStrPolicy(2)
567 MEDLoader.AssignStaticWritePropertiesTo(mm)
568 self.assertEqual(2,mm.getTooLongStrPolicy())
569 MEDLoader.SetTooLongStrPolicy(0)
570 MEDLoader.AssignStaticWritePropertiesTo(mm)
571 self.assertEqual(0,mm.getTooLongStrPolicy())
574 MEDLoader.SetTooLongStrPolicy(2)
575 self.assertRaises(MEDLoader.InterpKernelException,MEDLoader.WriteField,fname,f,True)# the component name is too long + policy 2 -> throw
576 f.getArray().setInfoOnComponent(0,'I129')
577 MEDLoader.WriteField(fname,f,True)
581 def testUsingAlreadyWrittenMesh2(self):
582 """ This test focuses on MEDLoader.WriteFieldUsingAlreadyWrittenMesh with mesh different from UMesh.
585 mesh=MEDLoader.MEDCouplingCMesh("mesh")
586 arrX=MEDLoader.DataArrayDouble([0,1,2,3])
587 arrY=MEDLoader.DataArrayDouble([0,2,3,5,7])
588 arrZ=MEDLoader.DataArrayDouble([7])
589 mesh.setCoords(arrX,arrY,arrZ)
591 f1=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_NODES) ; f1.setName("f1")
593 arr=MEDLoader.DataArrayDouble(20) ; arr.iota()
595 f1.checkConsistencyLight()
597 f2=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_NODES) ; f2.setName("f2")
599 arr=MEDLoader.DataArrayDouble(20) ; arr.iota() ; arr*=3
601 f2.checkConsistencyLight()
603 f11=f1.deepCopy() ; (f11.getArray())[:]*=4 ; f11.setTime(1.1,5,6)
605 MEDLoader.WriteMesh(fname,f1.getMesh(),True)
606 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f1)
607 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
608 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f11)
610 f1r=MEDLoader.ReadFieldNode(fname,"mesh",0,"f1",-1,-1);
611 self.assertTrue(f1.isEqual(f1r,1e-12,1e-12))
612 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))
613 f2r=MEDLoader.ReadFieldNode(fname,"mesh",0,"f2",-1,-1);
614 self.assertTrue(f2.isEqual(f2r,1e-12,1e-12))
615 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))
616 f3r=MEDLoader.ReadFieldNode(fname,"mesh",0,"f1",5,6);
617 self.assertTrue(f11.isEqual(f3r,1e-12,1e-12))
618 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))
622 def testEasyFieldRead1(self):
623 fname="Pyfile111.med"
624 arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
625 m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(arr,arr)
626 m=m.buildUnstructured()
628 f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
631 da=MEDLoader.DataArrayDouble([2,3,4,5,6,7,8,9,10])
632 f.setArray(da) ; f.setMesh(m)
633 MEDLoader.WriteField(fname,f,True)
635 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname),1e-12,1e-12))
636 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
637 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
638 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
641 f3.setArray(f.getArray()+30)
644 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
646 self.assertRaises(Exception,MEDLoader.ReadField,fname) # because several fields in fname now
647 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
648 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
649 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
650 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
651 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
652 self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
656 f2.setArray(f2.getArray()+10)
657 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
659 self.assertRaises(Exception,MEDLoader.ReadField,fname) # because unique field "field" has more than one time step
660 self.assertRaises(Exception,MEDLoader.ReadField,fname,"field") # because unique field "field" has more than one time step
661 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
662 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
663 self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
664 self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
666 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
667 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
668 self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
669 self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
671 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
672 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
673 self.assertRaises(Exception,MEDLoader.ReadField,fname,"field2",5,5) # invalid time step
674 self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
675 self.assertRaises(Exception,MEDLoader.ReadField,MEDLoader.ON_CELLS,fname,"mesh",0,"field2",5,5) # invalid time step
676 # Test on profile - restart from scratch
677 mm=MEDLoader.MEDFileUMesh()
681 pfl = MEDLoader.DataArrayInt(list(range(8)))
684 f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
687 da=MEDLoader.DataArrayDouble([2,3,4,5,6,7,8,9])
688 f.setArray(da) ; f.setMesh(m[pfl])
689 f.checkConsistencyLight()
691 f1ts=MEDLoader.MEDFileField1TS()
692 f1ts.setFieldProfile(f,mm,0,pfl)
695 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname),1e-12,1e-12))
696 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
697 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
698 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
701 f3.setArray(f.getArray()+30)
704 f1ts=MEDLoader.MEDFileField1TS()
705 f1ts.setFieldProfile(f3,mm,0,pfl)
708 self.assertRaises(Exception,MEDLoader.ReadField,fname) # because several fields in fname now
709 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
710 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
711 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
712 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
713 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
714 self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
718 f2.setArray(f2.getArray()+10)
719 f1ts=MEDLoader.MEDFileField1TS()
720 f1ts.setFieldProfile(f2,mm,0,pfl)
723 self.assertRaises(Exception,MEDLoader.ReadField,fname) # because unique field "field" has more than one time step
724 self.assertRaises(Exception,MEDLoader.ReadField,fname,"field") # because unique field "field" has more than one time step
725 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
726 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
727 self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
728 self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
730 self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
731 self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
732 self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
733 self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
735 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
736 self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
737 self.assertRaises(Exception,MEDLoader.ReadField,fname,"field2",5,5) # invalid time step
738 self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
739 self.assertRaises(Exception,MEDLoader.ReadField,MEDLoader.ON_CELLS,fname,"mesh",0,"field2",5,5) # invalid time step
743 def testMultiWriteFieldOnMergeableNodesMeshes(self):
744 fname="Pyfile120.med"
745 arr=MEDLoader.DataArrayDouble([(0,0),(1,0),(0,1),(0,0),(1,0),(0,1)])
746 m=MEDLoader.MEDCouplingUMesh("mesh",2)
749 m.insertNextCell(MEDLoader.NORM_TRI3,[0,4,2])
750 m.insertNextCell(MEDLoader.NORM_TRI3,[3,1,5])
753 f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
755 f.setArray(MEDLoader.DataArrayDouble([5,6]))
759 MEDLoader.WriteField(fname,f,True)
761 MEDLoader.WriteField(fname,f,False)
766 if __name__ == "__main__":