Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/med.git] / src / MEDMEM_SWIG / med_test_grid.py
1 # Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
2 #           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either 
6 # version 2.1 of the License.
7
8 # This library is distributed in the hope that it will be useful 
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
11 # Lesser General Public License for more details.
12
13 # You should have received a copy of the GNU Lesser General Public  
14 # License along with this library; if not, write to the Free Software 
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18
19 #    Python script for testing T5.10 task
20 # ###########################################
21
22 #% Test structured mesh (GRID) reading from file test19.med
23 #% test19.med can be obtained by running test19_c.out executable
24 # or locally in MEDMEM directory create_grid
25
26 from libMEDMEM_Swig import *
27
28 import os
29 #
30 #befor running this script, please be sure about the path the file fileName
31 #
32 filePath=os.environ["MED_ROOT_DIR"]
33 filePath=filePath+"/share/salome/resources/med/"
34
35 medFile = filePath + "test19.med"
36 print "Read file", medFile
37
38 md = MED()
39
40 mdDriver = MED_MED_RDONLY_DRIVER(medFile,md)
41
42 mdDriver.open()
43 mdDriver.readFileStruct()
44 mdDriver.close()
45
46 nbMeshes = md.getNumberOfMeshes()
47 print "Nb meshes:", nbMeshes
48 if nbMeshes == 0:
49   raise  RuntimeError, "Can't read med file"
50
51 ##############################
52 # test "CartGrid"
53 ##############################
54
55 mesh_name = md.getMeshName(0)
56 mesh = md.getMesh(mesh_name)
57 print "Read", mesh_name
58 mesh.read()
59
60 if mesh.getIsAGrid() == 0:
61   raise  RuntimeError, "Mesh 0 is not a grid"
62
63 grid = createGridFromMesh(mesh)
64
65 I = grid.getArrayLength(1)
66 print "_iArrayLength", I
67 if I != 4:
68   raise  RuntimeError, "Error in grid.getArrayLength(1)"
69
70 J = grid.getArrayLength(2)
71 print "_jArrayLength", J
72 if J != 4:
73   raise  RuntimeError, "Error in grid.getArrayLength(2)"
74
75 K = grid.getArrayLength(3)
76 print "_kArrayLength", K
77 if K != 0:
78   raise  RuntimeError, "Error in grid.getArrayLength(3)"
79
80 grid_type = grid.getGridType()
81 print "grid_type =", grid_type
82 if grid_type != MED_CARTESIAN:
83   raise  RuntimeError, "Wrong grid type"
84
85 spaceDim = grid.getSpaceDimension()
86 print "spaceDim =", spaceDim
87 if spaceDim != 2:
88   raise  RuntimeError, "Wrong space dimention"
89
90 meshDim = grid.getMeshDimension()
91 print "meshDim =", meshDim
92 if spaceDim != meshDim:
93   raise  RuntimeError, "Wrong mesh dimention"
94
95 nbNodes = grid.getNumberOfNodes()
96 print "nbNodes =", nbNodes
97 if nbNodes != 16:
98   raise  RuntimeError, "Wrong nb of nodes"
99
100 coordSyst = grid.getCoordinatesSystem()
101 print "coordSyst =", coordSyst
102 if coordSyst != "CARTESIAN":
103   raise  RuntimeError, "Wrong coordinates system"
104
105 coordinates = grid.getCoordinates(MED_FULL_INTERLACE)
106 print "coordinates =", coordinates
107 xy = [ grid.getArrayValue(1, I-1 ) , grid.getArrayValue(2, J-1 ) ]
108 xy2 = coordinates[(nbNodes-1)*spaceDim:(nbNodes*spaceDim)]
109 if xy != xy2:
110   raise  RuntimeError, "Error in grid.getCoordinates(MED_FULL_INTERLACE)"
111
112 nbTypesCell = grid.getNumberOfTypes(MED_CELL)
113 print "nbTypesCell =", nbTypesCell
114 if nbTypesCell != 1:
115   raise  RuntimeError, "Wrong nbTypesCell"
116
117 types = grid.getTypes(MED_CELL)
118 print "Cell types =", types
119 if types != [204]:
120   raise  RuntimeError, "Wrong Cell types"
121                 
122 nbElemType = grid.getNumberOfElements(MED_CELL,types[0])
123 print "Nb cells =", nbElemType
124 if nbElemType != 9:
125   raise  RuntimeError, "Wrong Nb cells"
126
127 print "getEntityPosition : convert node number to i,j,k"
128
129 n1 = grid.getEntityPosition(MED_NODE,10)
130 n2 = grid.getEntityPosition(MED_NODE,16)
131
132 if n1 == [1,2]: o1 = "Ok"
133 else:           o1 = "KO"
134 if n2 == [3,3]: o2 = "Ok"
135 else:           o2 = "KO"
136
137 print "Node 10 -> i,j = ", n1, " : ", o1
138 print "Node 16 -> i,j = ", n2, " : ", o2
139
140 print "getEntityPosition : convert cell number to i,j,k"
141
142 n1 = grid.getEntityPosition(MED_CELL,3)
143 n2 = grid.getEntityPosition(MED_CELL,4)
144
145 if n1 == [2,0]: o1 = "Ok"
146 else:           o1 = "KO"
147 if n2 == [0,1]: o2 = "Ok"
148 else:           o2 = "KO"
149
150 print "Cell 3 -> i,j = ", n1, " : ", o1
151 print "Cell 4 -> i,j = ", n2, " : ", o2
152
153 print "getEntityPosition : convert face number to i,j,k"
154
155 n1 = grid.getEntityPosition(MED_FACE,6)
156 n2 = grid.getEntityPosition(MED_FACE,8)
157
158 if n1 == [1,2,1]: o1 = "Ok"
159 else:             o1 = "KO"
160 if n2 == [1,1,2]: o2 = "Ok"
161 else:             o2 = "KO"
162
163 print "Face 6 -> i,j = ", n1, " : ", o1
164 print "Face 8 -> i,j = ", n2, " : ", o2
165
166 print "getNodeNumber : convert i,j,k to node number"
167
168 n1 = grid.getNodeNumber(2,1,0)
169 n2 = grid.getNodeNumber(1,2,0)
170
171 if n1 == 7:  o1 = "Ok"
172 else:        o1 = "KO"
173 if n2 == 10: o2 = "Ok"
174 else:        o2 = "KO"
175
176 print "getNodeNumber 2,1,0 = ", n1, " : ", o1
177 print "getNodeNumber 1,2,0 = ", n2, " : ", o2
178
179 print "getCellNumber : convert i,j,k to cell number"
180
181 n1 = grid.getCellNumber(1,0,0)
182 n2 = grid.getCellNumber(2,1,0)
183
184 if n1 == 2: o1 = "Ok"
185 else:       o1 = "KO"
186 if n2 == 6: o2 = "Ok"
187 else:       o2 = "KO"
188
189 print "getCellNumber 1,0,0 = ", n1, " : ", o1
190 print "getCellNumber 2,1,0 = ", n2, " : ", o2
191
192 print "getFaceNumber : convert i,j,k to face number"
193
194 n1 = grid.getFaceNumber(0,0,2,0)
195 n2 = grid.getFaceNumber(0,1,1,0)
196
197 if n1 == 7: o1 = "Ok"
198 else:       o1 = "KO"
199 if n2 == 5: o2 = "Ok"
200 else:       o2 = "KO"
201
202 print "getFaceNumber 1,0,2,0 = ", n1, " : ", o1
203 print "getFaceNumber 1,1,1,0 = ", n2, " : ", o2
204
205 print "Connectivity"
206 n1 = grid.getNodeNumber(0,0,0)
207 n2 = grid.getNodeNumber(1,0,0)
208 n3 = grid.getNodeNumber(1,1,0)
209 n4 = grid.getNodeNumber(0,1,0)
210
211 conn1 = [n1,n2,n3,n4]
212
213 Connectivity = grid.getConnectivity(MED_FULL_INTERLACE,MED_NODAL,MED_CELL,types[0])
214 print "connectivity =", Connectivity
215
216 print "Cell 1 nodes:", conn1, Connectivity[0:4]
217 if conn1 != Connectivity[0:4]:
218   raise  RuntimeError, "Wrong nodal connectivity"
219
220
221 ReverseConnectivity = grid.getReverseConnectivity(MED_NODAL)
222 ReverseConnectivityIndex = grid.getReverseConnectivityIndex(MED_NODAL)
223 n = 6
224 beg = ReverseConnectivityIndex[n-1]-1
225 end = ReverseConnectivityIndex[n]-1
226 print "Node",n,"rev connectivity =",ReverseConnectivity[beg:end]
227 if end-beg != 4:
228   raise  RuntimeError, "Wrong reverse connectivity"
229 if ReverseConnectivity[beg] != 1:
230   raise  RuntimeError, "Wrong reverse connectivity"
231
232
233 grid.calculateConnectivity(MED_FULL_INTERLACE,MED_DESCENDING,MED_CELL)
234 Connectivity = grid.getConnectivity(MED_FULL_INTERLACE,MED_DESCENDING,MED_CELL,MED_ALL_ELEMENTS)
235 ConnectivityIndex = mesh.getConnectivityIndex(MED_DESCENDING,MED_CELL)
236 n = 1
237 beg = ConnectivityIndex[n-1]-1
238 end = ConnectivityIndex[n]-1
239 print "Element",n,"descending connectivity -->",Connectivity[beg:end]
240 if Connectivity[beg:end] != [1, 4, 13, 14]:
241   raise  RuntimeError, "Wrong descending  connectivity"
242
243 print "getReverseConnectivity(MED_DESCENDING)", grid.getReverseConnectivity(MED_DESCENDING)
244 print "grid.getReverseConnectivityIndex(MED_DESCENDING)",grid.getReverseConnectivityIndex(MED_DESCENDING)
245
246 ##############################
247 # test "bodyfitted"
248 ##############################
249
250 mesh_name = md.getMeshName(1)
251 mesh = md.getMesh(mesh_name)
252 print "Read", mesh_name
253 mesh.read()
254
255 if mesh.getIsAGrid() == 0:
256   raise  RuntimeError, "Mesh 1 is not a grid"
257
258 grid = createGridFromMesh(mesh)
259
260 I = grid.getArrayLength(1)
261 print "_iArrayLength", I
262 if I != 2:
263   raise  RuntimeError, "Error in grid.getArrayLength(1)"
264
265 J = grid.getArrayLength(2)
266 print "_jArrayLength", J
267 if J != 2:
268   raise  RuntimeError, "Error in grid.getArrayLength(2)"
269
270 K = grid.getArrayLength(3)
271 print "_kArrayLength", K
272 if K != 0:
273   raise  RuntimeError, "Error in grid.getArrayLength(3)"
274
275 grid_type = grid.getGridType()
276 print "grid_type =", grid_type
277 if grid_type != MED_BODY_FITTED:
278   raise  RuntimeError, "Wrong grid type"
279
280 spaceDim = grid.getSpaceDimension()
281 print "spaceDim =", spaceDim
282 if spaceDim != 2:
283   raise  RuntimeError, "Wrong space dimention"
284
285 meshDim = grid.getMeshDimension()
286 print "meshDim =", meshDim
287 if spaceDim != meshDim:
288   raise  RuntimeError, "Wrong mesh dimention"
289
290 nbNodes = grid.getNumberOfNodes()
291 print "nbNodes =", nbNodes
292 if nbNodes != 4:
293   raise  RuntimeError, "Wrong nb of nodes"
294
295 coordSyst = grid.getCoordinatesSystem()
296 print "coordSyst =", coordSyst
297 if coordSyst != "CARTESIAN":
298   raise  RuntimeError, "Wrong coordinates system"
299
300 nbTypesCell = grid.getNumberOfTypes(MED_CELL)
301 print "nbTypesCell =", nbTypesCell
302 if nbTypesCell != 1:
303   raise  RuntimeError, "Wrong nbTypesCell"
304
305 types = grid.getTypes(MED_CELL)
306 print "Cell types =", types
307 if types != [204]:
308   raise  RuntimeError, "Wrong Cell types"
309                 
310 nbElemType = grid.getNumberOfElements(MED_CELL,types[0])
311 print "Nb cells =", nbElemType
312 if nbElemType != 1:
313   raise  RuntimeError, "Wrong Nb cells"
314
315 Connectivity = grid.getConnectivity(MED_FULL_INTERLACE,MED_NODAL,MED_CELL,types[0])
316 print "connectivity =", Connectivity
317 n1 = grid.getNodeNumber(0,0,0)
318 n2 = grid.getNodeNumber(1,0,0)
319 n3 = grid.getNodeNumber(1,1,0)
320 n4 = grid.getNodeNumber(0,1,0)
321 conn1 = [n1,n2,n3,n4]
322 print "Cell 1 nodes:", conn1, Connectivity[0:4]
323 if conn1 != Connectivity[0:4]:
324   raise  RuntimeError, "Wrong nodal connectivity"
325
326 ##############################################
327 # test "maa1" which in fact is not a pure GRID
328 ##############################################
329
330 mesh_name = md.getMeshName(2)
331 mesh = md.getMesh(mesh_name)
332 print "Read", mesh_name
333 mesh.read()
334
335 if mesh.getIsAGrid() == 0:
336   print "Mesh ",mesh_name," is not a grid"
337
338 print "END of the Pyhton script ..... Ctrl D to exit"