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