1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2023 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)
22 from MEDLoader import *
25 from MEDLoaderDataForTest import WriteInTmpDir
27 class MEDLoaderBasicsTest(unittest.TestCase):
29 def testExampleReadFieldOnAllEntity1(self):
30 from MEDLoaderDataForTest import MEDLoaderDataForTest
31 #! [PySnippetReadFieldOnAllEntity1_1]
32 fname="PyExamples1.med"
34 fieldName="FieldOnAll"
37 #! [PySnippetReadFieldOnAllEntity1_1]
38 #! [PySnippetWriteFieldOnAllEntity1_2]
39 m=MEDLoaderDataForTest.build2DMesh_3()
42 f=m.getMeasureField(False)
43 f=f.buildNewTimeReprFromThis(ONE_TIME,False)
44 f.setTime(5.5,iteration,order)
46 # MEDCoupling finished, MEDLoader advanced API specific part starting from here
48 mm.setMeshAtLevel(0,m)
49 ff=MEDFileField1TS.New()
50 ff.setFieldNoProfileSBT(f)
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))
80 #! [PySnippetReadFieldOnAllEntity1_5]
84 def testExampleReadFieldPartial1(self):
85 from MEDLoaderDataForTest import MEDLoaderDataForTest
86 #! [PySnippetReadFieldPartial1_1]
87 fname="PyExamples2.med"
89 fieldName="FieldPartial"
92 #! [PySnippetReadFieldPartial1_1]
93 #! [PySnippetWriteFieldPartial1_2]
94 m=MEDLoaderDataForTest.build2DMesh_1()
95 m.sortCellsInMEDFileFrmt()
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)
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]
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
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())
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]
162 def testExampleMeshAdvAPI1(self):
163 da=DataArrayDouble.New([0.,1.1,2.3,3.6])
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)
181 #! [PySnippetMeshAdvAPI1_3]
182 WriteUMesh("file3.med",f.getMesh(),True)
184 fileNameMultiTimeStep="file3.med"
185 WriteFieldUsingAlreadyWrittenMesh(fileNameMultiTimeStep,f)
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]
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]
240 mm.removeMeshAtLevel(-i)
242 mm.setMeshAtLevel(0,myMesh1)
243 mm.setMeshAtLevel(-1,myMesh2)
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]