Salome HOME
Copyright update 2020
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest1.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2020  CEA/DEN, EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 import MEDLoader
23 import unittest
24 from math import pi,e,sqrt
25 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
26 from MEDLoaderDataForTest import GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
27
28 class MEDLoaderTest1(unittest.TestCase):
29     @WriteInTmpDir
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));
36         pass
37
38     @WriteInTmpDir
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));
45         pass
46
47     @WriteInTmpDir
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));
54         pass
55
56     @WriteInTmpDir
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));
63         pass
64
65     @WriteInTmpDir
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));
72         pass
73
74     @WriteInTmpDir
75     def testFieldRW1(self):
76         GeneratePyfile7(self)
77         pass
78
79     @WriteInTmpDir
80     def testFieldRW2(self):
81         fileName="Pyfile8.med";
82         VAL1=12345.67890314;
83         VAL2=-1111111111111.;
84         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
85         MEDLoader.WriteField(fileName,f1,True);
86         f1.setTime(10.,8,9);
87         f1.getArray().setIJ(0,0,VAL1);
88         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
89         f1.setTime(10.14,18,19);
90         f1.getArray().setIJ(0,0,VAL2);
91         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
92         #retrieving time steps...
93         f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),8,9);
94         f1.setTime(10.,8,9);
95         f1.getArray().setIJ(0,0,VAL1);
96         self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
97         f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),0,1);
98         f3=MEDLoaderDataForTest.buildVecFieldOnCells_1();
99         self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
100         f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),18,19);
101         f1.setTime(10.14,18,19);
102         f1.getArray().setIJ(0,0,VAL2);
103         self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
104         #test of throw on invalid (dt,it)
105         self.assertRaises(Exception,MEDLoader.ReadFieldCell,fileName,f1.getMesh().getName(),0,f1.getName(),28,19);
106         #ON NODES
107         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
108         fileName2="Pyfile9.med";
109         MEDLoader.WriteField(fileName2,f1,True);
110         f1.setTime(110.,108,109);
111         tmp=f1.getArray().getPointer();
112         f1.getArray().setIJ(0,3,VAL1);
113         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName2,f1);
114         f1.setTime(210.,208,209);
115         f1.getArray().setIJ(0,3,VAL2);
116         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName2,f1);
117         f2=MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),108,109);
118         f1.setTime(110.,108,109);
119         f1.getArray().setIJ(0,3,VAL1);
120         self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
121         f2=MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),2,3);
122         f3=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
123         self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
124         f2=MEDLoader.ReadFieldNode(fileName2,f1.getMesh().getName(),0,f1.getName(),208,209);
125         f1.setTime(210.,208,209);
126         f1.getArray().setIJ(0,3,VAL2);
127         self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
128         pass
129
130     #
131     # Multi field in a same file, but this field has several
132     #
133     @WriteInTmpDir
134     def testFieldRW3(self):
135         fileName="Pyfile11.med";
136         VAL1=12345.67890314;
137         VAL2=-1111111111111.;
138         name1="AField";
139         name3="AMesh1";
140         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
141         f1.getMesh().setName(name3);
142         f1.setName(name1);
143         f1.setTime(10.,8,9);
144         tmp=f1.getArray().getPointer();
145         f1.getArray().setIJ(0,0,VAL1);
146         MEDLoader.WriteField(fileName,f1,True);
147         f1.setTime(10.14,18,19);
148         f1.getArray().setIJ(0,0,VAL2);
149         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.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
154         vec=MEDLoader.GetMeshNamesOnField(fileName,name1);
155         f1.setTime(10.66,38,39);
156         f1.getArray().setIJ(0,0,3*VAL2);
157         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
158         f1.setTime(10.77,48,49);
159         f1.getArray().setIJ(0,0,4*VAL2);
160         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
161         #ON NODES
162         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
163         f1.setName(name1);
164         f1.getMesh().setName(name3);
165         f1.setTime(110.,8,9);
166         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
167         f1.setTime(110.,108,109);
168         tmp=f1.getArray().getPointer();
169         f1.getArray().setIJ(0,3,VAL1);
170         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
171         f1.setTime(210.,208,209);
172         f1.getArray().setIJ(0,3,VAL2);
173         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
174         #
175         it1=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.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]);
187         #
188         #
189         f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,8,9);
190         self.assertAlmostEqual(VAL1,f1.getArray().getIJ(0,0),13);
191         f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,18,19);
192         self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,0),13);
193         f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,28,29);
194         self.assertAlmostEqual(3*VAL1,f1.getArray().getIJ(0,0),13);
195         f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,38,39);
196         self.assertAlmostEqual(3*VAL2,f1.getArray().getIJ(0,0),13);
197         f1=MEDLoader.ReadFieldCell(fileName,name3,0,name1,48,49);
198         self.assertAlmostEqual(4*VAL2,f1.getArray().getIJ(0,0),13);
199         #
200         f1=MEDLoader.ReadFieldNode(fileName,name3,0,name1,8,9);
201         self.assertAlmostEqual(71.,f1.getArray().getIJ(0,3),13);
202         f1=MEDLoader.ReadFieldNode(fileName,name3,0,name1,108,109);
203         self.assertAlmostEqual(VAL1,f1.getArray().getIJ(0,3),13);
204         f1=MEDLoader.ReadFieldNode(fileName,name3,0,name1,208,209);
205         self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,3),13);
206         pass
207
208     @WriteInTmpDir
209     def testMultiMeshRW1(self):
210         GeneratePyfile10(self)
211         pass
212
213     @WriteInTmpDir
214     def testFieldProfilRW1(self):
215         GeneratePyfile12(self)
216         #
217         pass
218
219     @WriteInTmpDir
220     def testFieldGaussRW1(self):
221         GeneratePyfile13(self)
222         pass
223
224     @WriteInTmpDir
225     def testFieldGaussNERW1(self):
226         GeneratePyfile14(self)
227         pass
228
229     @WriteInTmpDir
230     def testMesh3DSurfShuffleRW(self):
231         fileName="Pyfile15.med";
232         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
233         renumber1=[2,5,1,0,3,4]
234         mesh.renumberCells(renumber1,False);
235         mesh.checkConsistencyLight();
236         MEDLoader.WriteUMesh(fileName,mesh,True);
237         mesh_rw=MEDLoader.ReadUMeshFromFile(fileName,mesh.getName(),0);
238         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
239         pass
240
241     @WriteInTmpDir
242     def testMultiFieldShuffleRW1(self):
243         fileName="Pyfile17.med";
244         m=MEDLoaderDataForTest.build3DMesh_2();
245         self.assertEqual(20,m.getNumberOfCells());
246         self.assertEqual(45,m.getNumberOfNodes());
247         polys=[1,4,6]
248         m.convertToPolyTypes(polys);
249         renum=[1,3,2,8,9,12,13,16,19,0,4,7,5,15,14,17,10,18,6,11]
250         m.renumberCells(renum,False);
251         m.orientCorrectlyPolyhedrons();
252         # Writing
253         MEDLoader.WriteUMesh(fileName,m,True);
254         f1Tmp=m.getMeasureField(False);
255         f1=f1Tmp.buildNewTimeReprFromThis(MEDLoader.ONE_TIME,False);
256         f1.setTime(0.,1,2);
257         f_1=f1.cloneWithMesh(True);
258         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
259         f1.applyFunc("2*x");
260         f1.setTime(0.01,3,4);
261         f_2=f1.cloneWithMesh(True);
262         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
263         f1.applyFunc("2*x/3");
264         f1.setTime(0.02,5,6);
265         f_3=f1.cloneWithMesh(True);
266         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
267         # Reading
268         its=[(1,2),(3,4),(5,6)];
269         fs=MEDLoader.ReadFieldsOnSameMesh(MEDLoader.ON_CELLS,fileName,f_1.getMesh().getName(),0,f_1.getName(),its);
270         self.assertEqual(3,len(fs));
271         self.assertTrue(fs[0].isEqual(f_1,1e-12,1e-12));
272         self.assertTrue(fs[1].isEqual(f_2,1e-12,1e-12));
273         self.assertTrue(fs[2].isEqual(f_3,1e-12,1e-12));
274         pass
275
276     @WriteInTmpDir
277     def testWriteUMeshesRW1(self):
278         GeneratePyfile18(self)
279         pass
280
281     @WriteInTmpDir
282     def testFieldNodeProfilRW1(self):
283         GeneratePyfile19(self)
284         pass
285
286     @WriteInTmpDir
287     def testFieldNodeProfilRW2(self):
288         fileName="Pyfile23.med";
289         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
290         MEDLoader.WriteUMesh(fileName,mesh,True);
291         #
292         f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
293         f1.setName("FieldMix");
294         f1.setMesh(mesh);
295         arr2=[1071.,1171.,1010.,1110.,1020.,1120.,1030.,1130.,1040.,1140.,1050.,1150.,
296               1060.,1160.,1070.,1170.,1080.,1180.,1090.,1190.,1091.,1191.,1092.,1192.];
297         array=MEDLoader.DataArrayDouble.New();
298         array.setValues(arr2,12,2);
299         f1.setArray(array);
300         array.setInfoOnComponent(0,"plkj [mm]");
301         array.setInfoOnComponent(1,"pqqqss [mm]");
302         tmp=array.getPointer();
303         f1.setTime(3.17,2,7);
304         #
305         renumArr=[3,7,2,1,5,11,10,0,9,6,8,4]
306         f1.renumberNodes(renumArr);
307         f1.checkConsistencyLight();
308         MEDLoader.WriteField(fileName,f1,False);#<- False important for the test
309         f2=MEDLoader.ReadFieldNode(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
310         self.assertTrue(f2.isEqual(f1,1e-12,1e-12));
311         #
312         pass
313
314     @WriteInTmpDir
315     def testMixCellAndNodesFieldRW1(self):
316         fileName="Pyfile21.med";
317         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
318         f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
319         f1.setName("FieldMix");
320         f1.setMesh(mesh);
321         array=MEDLoader.DataArrayDouble.New();
322         f1.setArray(array);
323         arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.,50.,150.]
324         array.setValues(arr1,6,2);
325         array.setInfoOnComponent(0,"plkj [mm]");
326         array.setInfoOnComponent(1,"pqqqss [mm]");
327         f1.setTime(3.14,2,7);
328         f1.checkConsistencyLight();
329         #
330         f2=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
331         f2.setName("FieldMix");
332         f2.setMesh(mesh);
333         array=MEDLoader.DataArrayDouble.New();
334         f2.setArray(array);
335         arr2=[1071.,1171.,1010.,1110.,1020.,1120.,1030.,1130.,1040.,1140.,1050.,1150.,
336               1060.,1160.,1070.,1170.,1080.,1180.,1090.,1190.,1091.,1191.,1092.,1192.]
337         array.setValues(arr2,12,2)
338         array.setInfoOnComponent(0,"plkj [mm]");
339         array.setInfoOnComponent(1,"pqqqss [mm]");
340         f2.setTime(3.14,2,7);
341         f2.checkConsistencyLight();
342         #
343         MEDLoader.WriteField(fileName,f1,True);
344         ts=MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
345         self.assertEqual(1,len(ts));
346         self.assertEqual(MEDLoader.ON_CELLS,ts[0]);
347         fs=MEDLoader.GetAllFieldNamesOnMesh(fileName,f1.getMesh().getName());
348         self.assertEqual(1,len(fs));
349         self.assertTrue(fs[0]=="FieldMix");
350         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f2);
351         fs=MEDLoader.GetAllFieldNamesOnMesh(fileName,f1.getMesh().getName());
352         self.assertEqual(1,len(fs));
353         self.assertTrue(fs[0]=="FieldMix");
354         #
355         ts=MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
356         self.assertEqual(2,len(ts));
357         self.assertEqual(MEDLoader.ON_NODES,ts[0]);
358         self.assertEqual(MEDLoader.ON_CELLS,ts[1]);
359         #
360         f3=MEDLoader.ReadFieldNode(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
361         self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
362         f3=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
363         self.assertTrue(f3.isEqual(f1,1e-12,1e-12));
364         #
365         pass
366
367     @WriteInTmpDir
368     def testGetAllFieldNamesRW1(self):
369         fileName="Pyfile22.med";
370         mesh=MEDLoaderDataForTest.build2DMesh_2();
371         f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
372         f1.setName("Field1");
373         f1.setTime(3.44,5,6);
374         f1.setMesh(mesh);
375         f1.fillFromAnalytic(2,"x+y");
376         MEDLoader.WriteField(fileName,f1,True);
377         f1.setTime(1002.3,7,8);
378         f1.fillFromAnalytic(2,"x+77.*y");
379         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
380         f1.setName("Field2");
381         MEDLoader.WriteField(fileName,f1,False);
382         f1.setName("Field3");
383         mesh.setName("2DMesh_2Bis");
384         MEDLoader.WriteField(fileName,f1,False);
385         f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
386         f1.setName("Field8");
387         f1.setTime(8.99,7,9);
388         f1.setMesh(mesh);
389         f1.fillFromAnalytic(3,"3*x+y");
390         MEDLoader.WriteField(fileName,f1,False);
391         fs=MEDLoader.GetAllFieldNames(fileName);
392         self.assertEqual(4,len(fs));
393         self.assertTrue(fs[0]=="Field1");
394         self.assertTrue(fs[1]=="Field2");
395         self.assertTrue(fs[2]=="Field3");
396         self.assertTrue(fs[3]=="Field8");
397         pass
398
399     @WriteInTmpDir
400     def testBigNbOfCompoNonReg(self):
401         fileName="Pyfile57.med"
402         m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(MEDLoader.DataArrayDouble([0,1,2,3]),MEDLoader.DataArrayDouble([0,1]),MEDLoader.DataArrayDouble([0,1]))
403         m=m.buildUnstructured() ; m.setName("TinyMesh")
404         f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS) ; f.setMesh(m)
405         nbOfCompo=4100
406         arr=MEDLoader.DataArrayDouble(nbOfCompo*3) ; arr.iota()
407         arr.rearrange(nbOfCompo)
408         arr.setInfoOnComponents(["c%i" % (i) for i in range(nbOfCompo)])
409         f.setArray(arr)
410         f.setName("FieldBigCompo")
411         MEDLoader.WriteField(fileName,f,True)
412         f2=MEDLoader.ReadFieldCell(fileName,m.getName(),0,f.getName(),-1,-1)
413         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
414         pass
415
416     @WriteInTmpDir
417     def testMultiMeshTypeWrite0(self):
418         fname="Pyfile73.med"
419         m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
420         m.insertNextCell([0,2,1,3])
421         m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
422         #
423         ms = [m.deepCopy() for i in range(4)]
424         for i,elt in enumerate(ms):
425             elt.translate([float(i)*1.5,0.])
426             pass
427         #
428         m0=MEDLoader.MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms)
429         f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
430         MEDLoader.WriteField(fname,f,True)
431         #
432         fRead=MEDLoader.ReadFieldCell(fname,"merge",0,f.getName(),-1,-1)
433         fRead.setMesh(MEDLoader.MEDCoupling1SGTUMesh(fRead.getMesh()))
434         self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
435         #
436         m0=m0.buildUnstructured() ; m0.convertAllToPoly()
437         m0=MEDLoader.MEDCoupling1DGTUMesh(m0)
438         f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
439         MEDLoader.WriteField(fname,f,True)
440         #
441         fRead=MEDLoader.ReadFieldCell(fname,"merge",0,f.getName(),-1,-1)
442         fRead.setMesh(MEDLoader.MEDCoupling1DGTUMesh(fRead.getMesh()))
443         self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
444         #
445         m0=MEDLoader.MEDCouplingCMesh()
446         arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
447         m0.setCoords(arr,arr)
448         m0.setName("mesh")
449         f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
450         MEDLoader.WriteField(fname,f,True)
451         #
452         fRead=MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
453         self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
454         #
455         c=m0.buildUnstructured().getCoords()
456         m0=MEDLoader.MEDCouplingCurveLinearMesh("mesh")
457         m0.setNodeGridStructure([4,4])
458         m0.setCoords(c)
459         f=m0.getMeasureField(False) ; f.getArray().setInfoOnComponents(["ABC [defg]"])
460         MEDLoader.WriteField(fname,f,True)
461         #
462         fRead=MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
463         self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
464         pass
465
466     @WriteInTmpDir
467     def testMultiMeshTypeWrite1(self):
468         fname="Pyfile74.med"
469         m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
470         m.insertNextCell([0,2,1,3])
471         m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
472         #
473         ms = [m.deepCopy() for i in range(4)]
474         for i,elt in enumerate(ms):
475             elt.translate([float(i)*1.5,0.])
476             pass
477         m0=MEDLoader.MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms)
478         MEDLoader.WriteMesh(fname,m0,True)
479         #
480         mRead=MEDLoader.ReadMeshFromFile(fname,"merge",0)
481         self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingUMesh))
482         mRead=MEDLoader.MEDCoupling1SGTUMesh(mRead)
483         self.assertTrue(m0.isEqual(mRead,1e-12))
484         #
485         m0=m0.buildUnstructured() ; m0.convertAllToPoly()
486         m0=MEDLoader.MEDCoupling1DGTUMesh(m0)
487         MEDLoader.WriteMesh(fname,m0,True)
488         #
489         mRead=MEDLoader.ReadMeshFromFile(fname,"merge",0)
490         mRead=MEDLoader.MEDCoupling1DGTUMesh(mRead)
491         self.assertTrue(m0.isEqual(mRead,1e-12))
492         #
493         m0=MEDLoader.MEDCouplingCMesh()
494         arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
495         m0.setCoords(arr,arr)
496         m0.setName("mesh")
497         MEDLoader.WriteMesh(fname,m0,True)
498         #
499         mRead=MEDLoader.ReadMeshFromFile(fname,0)
500         self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingCMesh))
501         self.assertTrue(m0.isEqual(mRead,1e-12))
502         #
503         c=m0.buildUnstructured().getCoords()
504         m0=MEDLoader.MEDCouplingCurveLinearMesh("mesh")
505         m0.setNodeGridStructure([4,4])
506         m0.setCoords(c)
507         MEDLoader.WriteMesh(fname,m0,True)
508         #
509         mRead=MEDLoader.ReadMeshFromFile(fname,0)
510         self.assertTrue(isinstance(mRead,MEDLoader.MEDCouplingCurveLinearMesh))
511         self.assertTrue(m0.isEqual(mRead,1e-12))
512         pass
513
514     @WriteInTmpDir
515     def testChangeGroupName(self):
516         """ This test is a non regression test on MEDFileUMesh.changeGroupName thanks to Alliance.
517         """
518         mfd=MEDLoaderDataForTest.buildAMEDFileDataWithGroupOnOneFamilyForSauv()
519         mesh = mfd.getMeshes().getMeshAtPos(0)
520         mesh.changeGroupName("grp0_LM1", "xonall1")
521         self.assertTrue("xonall1" in mesh.getGroupsNames())
522         pass
523
524     @WriteInTmpDir
525     def testFieldWithTooLongName(self):
526         """ This test is a non regression test, to check that in basic API the policies are taken into account.
527         """
528         fname="Pyfile75.med"
529         # Coordinates
530         coords = [0.,0., 0.,1., 1.,1., 1.,0.]
531         # lvl 0 connectivity
532         conn2D   = [1,2,3,4]
533         # lvl 0 mesh
534         m=MEDLoader.MEDCouplingUMesh.New("mesh",2)
535         m.allocateCells(1)
536         m.insertNextCell(MEDLoader.NORM_QUAD4,4,conn2D)
537         m.finishInsertingCells()
538         # assigning coordinates
539         meshCoords=MEDLoader.DataArrayDouble.New()
540         meshCoords.setValues(coords, 4, 2)
541         m.setCoords(meshCoords)
542         #
543         f=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME)
544         f.setMesh(m)
545         d=MEDLoader.DataArrayDouble.New()
546         d.alloc(1,1)
547         d.iota(1.)
548         # setting a long name
549         d.setInfoOnComponent(0,"CONCENTRATION of I129")
550         f.setArray(d)
551         f.setName("field")
552         #
553         mm=MEDLoader.MEDFileUMesh()
554         MEDLoader.SetTooLongStrPolicy(2)
555         MEDLoader.AssignStaticWritePropertiesTo(mm)
556         self.assertEqual(2,mm.getTooLongStrPolicy())
557         MEDLoader.SetTooLongStrPolicy(0)
558         MEDLoader.AssignStaticWritePropertiesTo(mm)
559         self.assertEqual(0,mm.getTooLongStrPolicy())
560         del mm
561         #
562         MEDLoader.SetTooLongStrPolicy(2)
563         self.assertRaises(MEDLoader.InterpKernelException,MEDLoader.WriteField,fname,f,True)# the component name is too long + policy 2 -> throw
564         f.getArray().setInfoOnComponent(0,'I129')
565         MEDLoader.WriteField(fname,f,True)
566         pass
567
568     @WriteInTmpDir
569     def testUsingAlreadyWrittenMesh2(self):
570         """ This test focuses on MEDLoader.WriteFieldUsingAlreadyWrittenMesh with mesh different from UMesh.
571         """
572         fname="Pyfile76.med"
573         mesh=MEDLoader.MEDCouplingCMesh("mesh")
574         arrX=MEDLoader.DataArrayDouble([0,1,2,3])
575         arrY=MEDLoader.DataArrayDouble([0,2,3,5,7])
576         arrZ=MEDLoader.DataArrayDouble([7])
577         mesh.setCoords(arrX,arrY,arrZ)
578         #
579         f1=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_NODES) ; f1.setName("f1")
580         f1.setMesh(mesh)
581         arr=MEDLoader.DataArrayDouble(20) ; arr.iota()
582         f1.setArray(arr)
583         f1.checkConsistencyLight()
584         #
585         f2=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_NODES) ; f2.setName("f2")
586         f2.setMesh(mesh)
587         arr=MEDLoader.DataArrayDouble(20) ; arr.iota() ; arr*=3
588         f2.setArray(arr)
589         f2.checkConsistencyLight()
590         #
591         f11=f1.deepCopy() ; (f11.getArray())[:]*=4 ; f11.setTime(1.1,5,6)
592         #
593         MEDLoader.WriteMesh(fname,f1.getMesh(),True)
594         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f1)
595         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
596         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f11)
597         ##
598         f1r=MEDLoader.ReadFieldNode(fname,"mesh",0,"f1",-1,-1);
599         self.assertTrue(f1.isEqual(f1r,1e-12,1e-12))
600         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))
601         f2r=MEDLoader.ReadFieldNode(fname,"mesh",0,"f2",-1,-1);
602         self.assertTrue(f2.isEqual(f2r,1e-12,1e-12))
603         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))
604         f3r=MEDLoader.ReadFieldNode(fname,"mesh",0,"f1",5,6);
605         self.assertTrue(f11.isEqual(f3r,1e-12,1e-12))
606         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))
607         pass
608
609     @WriteInTmpDir
610     def testEasyFieldRead1(self):
611         fname="Pyfile111.med"
612         arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
613         m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(arr,arr)
614         m=m.buildUnstructured()
615         m.setName("mesh")
616         f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
617         f.setName("field")
618         f.setTime(3.,1,2)
619         da=MEDLoader.DataArrayDouble([2,3,4,5,6,7,8,9,10])
620         f.setArray(da) ; f.setMesh(m)
621         MEDLoader.WriteField(fname,f,True)
622         #
623         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname),1e-12,1e-12))
624         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
625         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
626         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
627         #
628         f3=f.deepCopy()
629         f3.setArray(f.getArray()+30)
630         f3.setName("field2")
631         f3.setTime(5.,4,5)
632         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
633         #
634         self.assertRaises(Exception,MEDLoader.ReadField,fname) # because several fields in fname now
635         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
636         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
637         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
638         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
639         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
640         self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
641         #
642         f2=f.deepCopy()
643         f2.setTime(4.,3,4)
644         f2.setArray(f2.getArray()+10)
645         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
646         #
647         self.assertRaises(Exception,MEDLoader.ReadField,fname) # because unique field "field" has more than one time step
648         self.assertRaises(Exception,MEDLoader.ReadField,fname,"field") # because unique field "field" has more than one time step
649         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
650         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
651         self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
652         self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
653         #
654         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
655         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
656         self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
657         self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
658         #
659         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
660         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
661         self.assertRaises(Exception,MEDLoader.ReadField,fname,"field2",5,5) # invalid time step
662         self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
663         self.assertRaises(Exception,MEDLoader.ReadField,MEDLoader.ON_CELLS,fname,"mesh",0,"field2",5,5) # invalid time step
664         # Test on profile - restart from scratch
665         mm=MEDLoader.MEDFileUMesh()
666         mm[0]=m
667         mm.write(fname,2)
668         #
669         pfl = MEDLoader.DataArrayInt(list(range(8)))
670         pfl.setName("PFL")
671         #
672         f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
673         f.setName("field")
674         f.setTime(3.,1,2)
675         da=MEDLoader.DataArrayDouble([2,3,4,5,6,7,8,9])
676         f.setArray(da) ; f.setMesh(m[pfl])
677         f.checkConsistencyLight()
678         #
679         f1ts=MEDLoader.MEDFileField1TS()
680         f1ts.setFieldProfile(f,mm,0,pfl)
681         f1ts.write(fname,0)
682         #
683         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname),1e-12,1e-12))
684         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
685         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
686         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
687         #
688         f3=f.deepCopy()
689         f3.setArray(f.getArray()+30)
690         f3.setName("field2")
691         f3.setTime(5.,4,5)
692         f1ts=MEDLoader.MEDFileField1TS()
693         f1ts.setFieldProfile(f3,mm,0,pfl)
694         f1ts.write(fname,0)
695         #
696         self.assertRaises(Exception,MEDLoader.ReadField,fname) # because several fields in fname now
697         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
698         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
699         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
700         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
701         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
702         self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
703         #
704         f2=f.deepCopy()
705         f2.setTime(4.,3,4)
706         f2.setArray(f2.getArray()+10)
707         f1ts=MEDLoader.MEDFileField1TS()
708         f1ts.setFieldProfile(f2,mm,0,pfl)
709         f1ts.write(fname,0)
710         #
711         self.assertRaises(Exception,MEDLoader.ReadField,fname) # because unique field "field" has more than one time step
712         self.assertRaises(Exception,MEDLoader.ReadField,fname,"field") # because unique field "field" has more than one time step
713         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
714         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
715         self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
716         self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
717         #
718         self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
719         self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
720         self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
721         self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
722         #
723         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
724         self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
725         self.assertRaises(Exception,MEDLoader.ReadField,fname,"field2",5,5) # invalid time step
726         self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
727         self.assertRaises(Exception,MEDLoader.ReadField,MEDLoader.ON_CELLS,fname,"mesh",0,"field2",5,5) # invalid time step
728         pass
729
730     @WriteInTmpDir
731     def testMultiWriteFieldOnMergeableNodesMeshes(self):
732         fname="Pyfile120.med"
733         arr=MEDLoader.DataArrayDouble([(0,0),(1,0),(0,1),(0,0),(1,0),(0,1)])
734         m=MEDLoader.MEDCouplingUMesh("mesh",2)
735         m.setCoords(arr)
736         m.allocateCells()
737         m.insertNextCell(MEDLoader.NORM_TRI3,[0,4,2])
738         m.insertNextCell(MEDLoader.NORM_TRI3,[3,1,5])
739         m.setName("mesh")
740         #
741         f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
742         f.setMesh(m)
743         f.setArray(MEDLoader.DataArrayDouble([5,6]))
744         f.setName("field")
745         #
746         f.setTime(0.,0,0)
747         MEDLoader.WriteField(fname,f,True)
748         f.setTime(1.,1,0)
749         MEDLoader.WriteField(fname,f,False)
750         pass
751
752     pass
753
754 if __name__ == "__main__":
755   unittest.main()