Salome HOME
e8448d7ce11b9365a3ca3ade6f8636cc56ccdd50
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderExamplesTest.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2019  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 from MEDLoader import *
23 import unittest
24 import os
25 from MEDLoaderDataForTest import WriteInTmpDir
26
27 class MEDLoaderBasicsTest(unittest.TestCase):
28     @WriteInTmpDir
29     def testExampleReadFieldOnAllEntity1(self):
30         from MEDLoaderDataForTest import MEDLoaderDataForTest
31 #! [PySnippetReadFieldOnAllEntity1_1]
32         fname="PyExamples1.med"
33         meshName="mesh"
34         fieldName="FieldOnAll"
35         iteration=3
36         order=4
37 #! [PySnippetReadFieldOnAllEntity1_1]
38 #! [PySnippetWriteFieldOnAllEntity1_2]
39         m=MEDLoaderDataForTest.build2DMesh_3()
40         m=m[:10]
41         m.setName(meshName)
42         f=m.getMeasureField(False)
43         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
44         f.setTime(5.5,iteration,order)
45         f.setName(fieldName)
46         # MEDCoupling finished, MEDLoader advanced API specific part starting from here
47         mm=MEDFileUMesh.New()
48         mm.setMeshAtLevel(0,m)
49         ff=MEDFileField1TS.New()
50         ff.setFieldNoProfileSBT(f)
51         mm.write(fname,2)
52         ff.write(fname,0)
53 #! [PySnippetWriteFieldOnAllEntity1_2]
54 #! [PySnippetReadFieldOnAllEntity1_3]
55         medfileField1TS=MEDFileField1TS.New(fname,fieldName,iteration,order)
56         mm=MEDFileMesh.New(fname)
57         fread=medfileField1TS.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
58         fread2=medfileField1TS.getFieldAtLevel(ON_CELLS,0)
59         self.assertTrue(fread.isEqual(f,1e-12,1e-12))
60         self.assertTrue(fread2.isEqual(f,1e-12,1e-12))
61 #! [PySnippetReadFieldOnAllEntity1_3]
62 #! [PySnippetReadFieldOnAllEntity1_4]
63         medfileFieldMTS=MEDFileFieldMultiTS.New(fname,fieldName)
64         mm=MEDFileMesh.New(fname)
65         fread=medfileFieldMTS.getFieldOnMeshAtLevel(ON_CELLS,iteration,order,0,mm)
66         fread2=medfileFieldMTS.getFieldAtLevel(ON_CELLS,iteration,order,0)
67         self.assertTrue(fread.isEqual(f,1e-12,1e-12))
68         self.assertTrue(fread2.isEqual(f,1e-12,1e-12))
69 #! [PySnippetReadFieldOnAllEntity1_4]
70 #! [PySnippetReadFieldOnAllEntity1_5]
71         medfileFieldMTS=MEDFileFieldMultiTS.New(fname,fieldName)
72         for medfileField1TS in medfileFieldMTS:
73             if medfileField1TS.getTime()[:2]==[iteration,order]:
74                 fread=medfileField1TS.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
75                 fread2=medfileField1TS.getFieldAtLevel(ON_CELLS,0)
76                 self.assertTrue(fread.isEqual(f,1e-12,1e-12))
77                 self.assertTrue(fread2.isEqual(f,1e-12,1e-12))
78                 pass
79             pass
80 #! [PySnippetReadFieldOnAllEntity1_5]
81         pass
82
83     @WriteInTmpDir
84     def testExampleReadFieldPartial1(self):
85         from MEDLoaderDataForTest import MEDLoaderDataForTest
86 #! [PySnippetReadFieldPartial1_1]
87         fname="PyExamples2.med"
88         meshName="mesh"
89         fieldName="FieldPartial"
90         iteration=3
91         order=4
92 #! [PySnippetReadFieldPartial1_1]
93 #! [PySnippetWriteFieldPartial1_2]
94         m=MEDLoaderDataForTest.build2DMesh_1()
95         m.sortCellsInMEDFileFrmt()
96         m.setName(meshName)
97         # end of generation of a mesh -> let's create a field on that mesh
98         f=m.getMeasureField(False)
99         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
100         f.setTime(5.5,iteration,order)
101         f.setName(fieldName)
102         # The MEDCoupling part is finished -> let's perform advanced API
103         mm=MEDFileUMesh.New()
104         mm.setMeshAtLevel(0,m) # the MED file data structure is ready for writing. Of course mm could have been more complicated with groups, families, multilevel
105         # Let's building a sub field
106         pfl=DataArrayInt.New([1,3,4,5])
107         pfl.setName("myPfl") # here it is necessary to give a name to be compliant with MED file
108         f=f[pfl] ; f.getMesh().setName(m.getName()) # of course f should be in coherence with pfl -> f[pfl]
109         #
110         ff=MEDFileField1TS.New()
111         tmp=f.getMesh() # useless line, only to show that mesh into f is not considered by MEDFileField1TS.setFieldProfile
112         f.setMesh(None) # useless line, only to show that mesh into f is not considered by MEDFileField1TS.setFieldProfile
113         ff.setFieldProfile(f,mm,0,pfl)
114         f.setMesh(tmp) # useless line, only to show that mesh into f is not considered by MEDFileField1TS.setFieldProfile
115         mm.write(fname,2)
116         ff.write(fname,0)
117 #! [PySnippetWriteFieldPartial1_2]
118 #! [PySnippetReadFieldPartial1_3]
119         mm=MEDFileMesh.New(fname)
120         medfileField1TS=MEDFileField1TS.New(fname,fieldName,iteration,order)
121         fread=medfileField1TS.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
122         fread2=medfileField1TS.getFieldAtLevel(ON_CELLS,0)
123         self.assertTrue(fread.isEqual(f,1e-12,1e-12))
124         self.assertTrue(fread2.isEqual(f,1e-12,1e-12))
125 #! [PySnippetReadFieldPartial1_3]
126 #! [PySnippetReadFieldPartial1_4]
127         medfileField1TS=MEDFileField1TS.New(fname,fieldName,iteration,order)
128         mm=MEDFileMesh.New(fname)
129         valsRead,pflRead=medfileField1TS.getFieldWithProfile(ON_CELLS,0,mm)
130         self.assertEqual(valsRead.getName(),f.getName())
131         valsRead.setName("")
132         self.assertTrue(valsRead.isEqual(f.getArray(),1e-12))
133         pflRead.setName(pfl.getName())
134         self.assertTrue(pflRead.isEqual(pfl))
135 #! [PySnippetReadFieldPartial1_4]
136 #! [PySnippetReadFieldPartial1_5]
137         firstApproachMesh=fread.getMesh()
138         mm=MEDFileMesh.New(fname)
139         wholeMesh=mm.getMeshAtLevel(0)
140         wholeMesh.tryToShareSameCoords(firstApproachMesh,1e-12)
141         isIncluded,pflComputed=wholeMesh.areCellsIncludedIn(firstApproachMesh,2)
142         self.assertTrue(isIncluded)
143         self.assertEqual(pflComputed.getName(),mm.getName())
144         pflComputed.setName(pflRead.getName())
145         self.assertTrue(pflComputed.isEqual(pflRead))
146 #! [PySnippetReadFieldPartial1_5]
147 #! [PySnippetReadFieldPartial1_6]
148         mm=MEDFileMesh.New(fname)
149         wholeMesh=mm.getMeshAtLevel(0)
150         computedMesh=wholeMesh[pflRead] ; computedMesh.setName(mm.getName())
151         self.assertTrue(computedMesh.isEqual(fread.getMesh(),1e-12))
152         fieldFromSecondApproach=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME)
153         fieldFromSecondApproach.setName(medfileField1TS.getName())
154         fieldFromSecondApproach.setMesh(computedMesh)
155         fieldFromSecondApproach.setArray(valsRead)
156         fieldFromSecondApproach.setTime(medfileField1TS.getTime()[2],medfileField1TS.getTime()[0],medfileField1TS.getTime()[1])
157         self.assertTrue(fieldFromSecondApproach.isEqual(fread,1e-12,1e-12))
158 #! [PySnippetReadFieldPartial1_6]
159         pass
160
161     @WriteInTmpDir
162     def testExampleMeshAdvAPI1(self):
163         da=DataArrayDouble.New([0.,1.1,2.3,3.6])
164         meshName="Example2"
165         cmesh=MEDCouplingCMesh.New() ; cmesh.setCoords(da,da,da)
166         myMesh=cmesh.buildUnstructured()
167 #! [PySnippetMeshAdvAPI1_1]
168         self.assertTrue(isinstance(myMesh,MEDCouplingUMesh))
169         myMesh.setName(meshName)
170         WriteUMesh("wFile1.med",myMesh,True)
171 #! [PySnippetMeshAdvAPI1_1]
172         os.remove("wFile1.med")
173 #! [PySnippetMeshAdvAPI1_2]
174         self.assertTrue(isinstance(myMesh,MEDCouplingUMesh))
175         myMesh.setName(meshName)
176         WriteUMesh("wFile1.med",myMesh,False)
177 #! [PySnippetMeshAdvAPI1_2]
178         f=myMesh.getMeasureField(False)
179         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
180         f.setName("myField")
181 #! [PySnippetMeshAdvAPI1_3]
182         WriteUMesh("file3.med",f.getMesh(),True)
183         f.setTime(1.2,1,0)
184         fileNameMultiTimeStep="file3.med"
185         WriteFieldUsingAlreadyWrittenMesh(fileNameMultiTimeStep,f)
186         f.setTime(1.3,2,0)
187         f.applyFunc("sqrt(x)");
188         #Writing second time step with iteration==2 and order==0
189         WriteFieldUsingAlreadyWrittenMesh("file3.med",f);
190 #! [PySnippetMeshAdvAPI1_3]
191 #! [PySnippetMeshAdvAPI1_11]
192         timeStepsIds=GetCellFieldIterations("file3.med","Example2","myField")
193         self.assertEqual([(1, 0),(2, 0)],timeStepsIds)
194         fs=ReadFieldsOnSameMesh(ON_CELLS,"file3.med","Example2",0,"myField",timeStepsIds);
195 #! [PySnippetMeshAdvAPI1_11]
196         ###
197         myMesh0=myMesh[:] ; myMesh0.setName("Example2")
198         myMesh1=myMesh0.buildDescendingConnectivity()[0] ; myMesh1.setName(myMesh0.getName())
199         myMesh2=myMesh1.buildDescendingConnectivity()[0] ; myMesh2.setName(myMesh0.getName())
200         myMesh3=myMesh2.buildDescendingConnectivity()[0] ; myMesh3.setName(myMesh0.getName())
201         mm=MEDFileUMesh.New()
202         mm.setMeshAtLevel(0,myMesh0)
203         mm.setMeshAtLevel(-1,myMesh1)
204         mm.setMeshAtLevel(-2,myMesh2)
205         mm.setMeshAtLevel(-3,myMesh3)
206         mm.write("file2.med",2)
207         F1Cell=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME)
208         F1Cell.setMesh(myMesh0)
209         F1Cell.setArray(myMesh0.getCoords()[:myMesh0.getNumberOfCells()])
210         F1Cell.setTime(1000.,2,3)
211         F1Cell.setName("F1Cell")
212         WriteFieldUsingAlreadyWrittenMesh("file2.med",F1Cell)
213         F1Cell1=F1Cell.deepCopy()
214         F1Cell1.setMesh(myMesh1)
215         F1Cell1.setArray(myMesh1.computeCellCenterOfMass())
216         WriteFieldUsingAlreadyWrittenMesh("file2.med",F1Cell1)
217 #! [PySnippetMeshAdvAPI1_12]
218         f1Cell_3D=ReadFieldCell("file2.med","Example2",0,"F1Cell",2,3)
219 #! [PySnippetMeshAdvAPI1_12]
220 #! [PySnippetMeshAdvAPI1_13]
221         f1Cell_2D=ReadFieldCell("file2.med","Example2",-1,"F1Cell",2,3)
222 #! [PySnippetMeshAdvAPI1_13]
223         self.assertTrue(F1Cell.isEqual(f1Cell_3D,1e-12,1e-12))
224 #! [PySnippetMeshAdvAPI1_8]
225         self.assertEqual(3,ReadUMeshDimFromFile("file2.med","Example2"))
226 #! [PySnippetMeshAdvAPI1_8]
227 #! [PySnippetMeshAdvAPI1_7]
228         m2D=ReadUMeshFromFile("file2.med","Example2",0)
229 #! [PySnippetMeshAdvAPI1_7]
230 #! [PySnippetMeshAdvAPI1_4]
231         m2D=ReadUMeshFromFile("file2.med","Example2",-1)
232 #! [PySnippetMeshAdvAPI1_4]
233 #! [PySnippetMeshAdvAPI1_5]
234         m1D=ReadUMeshFromFile("file2.med","Example2",-2)
235 #! [PySnippetMeshAdvAPI1_5]
236 #! [PySnippetMeshAdvAPI1_6]
237         m0D=ReadUMeshFromFile("file2.med","Example2",-3)
238 #! [PySnippetMeshAdvAPI1_6]
239         for i in range(4):
240             mm.removeMeshAtLevel(-i)
241             pass
242         mm.setMeshAtLevel(0,myMesh1)
243         mm.setMeshAtLevel(-1,myMesh2)
244         mm.setName("MyMesh")
245         mm.write("file1.med",2)
246 #! [PySnippetMeshAdvAPI1_9]
247         m2D=ReadUMeshFromFile("file1.med","MyMesh",0)
248 #! [PySnippetMeshAdvAPI1_9]
249 #! [PySnippetMeshAdvAPI1_10]
250         m1D=ReadUMeshFromFile("file1.med","MyMesh",-1)
251 #! [PySnippetMeshAdvAPI1_10]
252         pass
253
254     pass
255
256 unittest.main()