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