Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/med.git] / src / MEDMEM_SWIG / test_gibi.py
1 #  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
3 #  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 #
6 #  This library is free software; you can redistribute it and/or
7 #  modify it under the terms of the GNU Lesser General Public
8 #  License as published by the Free Software Foundation; either
9 #  version 2.1 of the License.
10 #
11 #  This library is distributed in the hope that it will be useful,
12 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 #  Lesser General Public License for more details.
15 #
16 #  You should have received a copy of the GNU Lesser General Public
17 #  License along with this library; if not, write to the Free Software
18 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 #
20 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #
22 ###################################################################################
23 ###################################################################################
24 #
25 from libMEDMEM_Swig import *
26 from random import *
27 import string
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=os.path.join(filePath, "share", "salome", "resources", "med")
34 gibiFile = "elle_2D_QT_2x2.sauve"
35 mesh1Name = string.split(gibiFile,".")[0]+"_fromGibiDriver"
36
37 gibiFile = os.path.join(filePath, gibiFile)
38 medFile = string.split(gibiFile,".")[0]+"_fromGibiDriver.med"
39 vtkFile = string.split(gibiFile,".")[0]+"_fromGibiDriver.vtk"
40 mesh2Name = mesh1Name
41
42 mesh = MESH()
43 meshDriver = GIBI_MESH_RDONLY_DRIVER(gibiFile,mesh)
44
45 meshDriver.open()
46 meshDriver.read()
47 meshDriver.close()
48
49 #print mesh
50
51 meshName = mesh.getName()
52 spaceDim = mesh.getSpaceDimension()
53 meshDim = mesh.getMeshDimension()
54 print "The mesh ",meshName," is a ",spaceDim,"D mesh on a ",meshDim,"D geometry"
55 print "and is mounted via the GIBI driver"
56 nbNodes = mesh.getNumberOfNodes()
57 print "The mesh ",meshName," has",nbNodes,"Nodes"
58 coordSyst = mesh.getCoordinatesSystem()
59 print "The coordinates system is",coordSyst
60 print "The Coordinates :"
61 coordNames = []
62 coordUnits = []
63 for isd in range(spaceDim):
64     coordNames.append(mesh.getCoordinateName(isd))
65     coordUnits.append(mesh.getCoordinateUnit(isd))
66
67 print "names:", coordNames
68 print "units", coordUnits
69 print "values:"
70 coordinates = mesh.getCoordinates(MED_FULL_INTERLACE)
71 for k in range(nbNodes):
72     kp1 = k+1
73     coords = []
74     for isd in range(spaceDim):
75         isdp1 = isd+1
76         coords.append(mesh.getCoordinate(kp1,isdp1))
77
78     print coords," ---- ", coordinates[k*spaceDim:((k+1)*spaceDim)]
79
80 print ""
81 print "Show the Nodal Connectivity:"
82 nbTypesCell = mesh.getNumberOfTypes(MED_CELL)
83 print ""
84 if (nbTypesCell>0):
85     print "The Mesh has",nbTypesCell,"Type(s) of Cell"
86     types = mesh.getTypes(MED_CELL)
87     for k in range(nbTypesCell):
88         type = types[k]
89         nbElemType = mesh.getNumberOfElements(MED_CELL,type)
90         print "For the type:",type,"there is(are)",nbElemType,"elemnt(s)"
91         connectivity = mesh.getConnectivity(MED_FULL_INTERLACE,MED_NODAL,MED_CELL,type)
92         nbNodesPerCell = type%100
93         for j in range(nbElemType):
94             print "Element",(j+1)," ",connectivity[j*nbNodesPerCell:(j+1)*nbNodesPerCell]
95
96 print ""
97 print "Show the Reverse Nodal Connectivity:"
98 ReverseConnectivity = mesh.getReverseConnectivity(MED_NODAL)
99 ReverseConnectivityIndex = mesh.getReverseConnectivityIndex(MED_NODAL)
100 print ""
101 for j in range(nbNodes):
102     begin = ReverseConnectivityIndex[j]-1
103     end = ReverseConnectivityIndex[j+1]-1
104     print "Node",(j+1),"-->",ReverseConnectivity[begin:end]
105
106 print ""
107 print "Show the Descending Connectivity:"
108 mesh.calculateConnectivity(MED_FULL_INTERLACE,MED_DESCENDING,MED_CELL)
109 nbElemts = mesh.getNumberOfElements(MED_CELL,MED_ALL_ELEMENTS)
110 Connectivity = mesh.getConnectivity(MED_FULL_INTERLACE,MED_DESCENDING,MED_CELL,MED_ALL_ELEMENTS)
111 ConnectivityIndex = mesh.getConnectivityIndex(MED_DESCENDING,MED_CELL)
112 print ""
113 for j in range(nbElemts):
114     begin = ConnectivityIndex[j]-1
115     end = ConnectivityIndex[j+1]-1
116     print "Element",(j+1),"-->",Connectivity[begin:end]
117
118 print ""
119 for entity in [MED_NODE,MED_CELL,MED_FACE,MED_EDGE]:
120     nbFam = mesh.getNumberOfFamilies(entity)
121     nbGrp = mesh.getNumberOfGroups(entity)
122     if (entity == MED_NODE) :
123         if (nbFam > 0) : print "This mesh has",nbFam,"Node Family(ies)"
124         if (nbGrp > 0) : print "This mesh has",nbGrp,"Node Group(s)"
125     elif (entity == MED_CELL) :
126         if (nbFam > 0) : print "This mesh has",nbFam,"Cell Family(ies)"
127         if (nbGrp > 0) : print "This mesh has",nbGrp,"Cell Group(s)"
128     elif (entity == MED_FACE) :
129         if (nbFam > 0) : print "This mesh has",nbFam,"Face Family(ies)"
130         if (nbGrp > 0) : print "This mesh has",nbGrp,"Face Group(s)"
131     elif (entity == MED_EDGE) :
132         if (nbFam > 0) : print "This mesh has",nbFam,"Edge Family(ies)"
133         if (nbGrp > 0) : print "This mesh has",nbGrp,"Edge Group(s)"
134
135 for entity in [MED_NODE,MED_CELL,MED_FACE,MED_EDGE]:
136     nbFam = mesh.getNumberOfFamilies(entity)
137     nbGrp = mesh.getNumberOfGroups(entity)
138     if nbFam > 0:
139         for j in range(nbFam):
140             print ""
141             family = mesh.getFamily(entity,j+1)
142             familyName = family.getName()
143             familyDescription = family.getDescription()
144             familyEntity = family.getEntity()
145             familyBool = family.isOnAllElements()
146             print "  -Name:",familyName
147             print "  -Description:",familyDescription
148             print "  -Entity:",familyEntity
149             familyIdentifier = family.getIdentifier()
150             nbOfAtt = family.getNumberOfAttributes()
151             print "  -Identifier:",familyIdentifier
152             print "  -Number Of Attributes:",nbOfAtt
153             attributesids = family.getAttributesIdentifiers()
154             attributesvals = family.getAttributesValues()
155             for k in range(nbOfAtt):
156                 print "    * Attributes:",attributesids[k],":",attributesvals[k],",",family.getAttributeDescription(k+1)
157             nbOfGrp = family.getNumberOfGroups()
158             print "  -Number Of Groups:",nbOfGrp
159             for k in range(nbOfGrp):
160                 print "    * Group:",family.getGroupName(k+1)
161             print "  -Entities list:"
162             if (familyBool):
163                 print "  -Is on all entities"
164             else:
165                 nbOfTypes = family.getNumberOfTypes()
166                 types = family.getTypes()
167                 print "  -Number Of Types:",nbOfTypes
168                 for k in range(nbOfTypes):
169                     type = types[k]
170                     nbOfElmtsOfType = family.getNumberOfElements(type)
171                     number = family.getNumber(type)
172                     print "    * Type",type
173                     print "    * Number",number[0:nbOfElmtsOfType]
174                 print ""
175     print ""
176
177     if nbGrp > 0:
178         for j in range(nbGrp):
179             print ""
180             group = mesh.getGroup(entity,j+1)
181             groupName = group.getName()
182             groupDescription = group.getDescription()
183             groupEntity = group.getEntity()
184             groupBool = group.isOnAllElements()
185             print "  -Name:",groupName
186             print "  -Description:",groupDescription
187             print "  -Entity:",groupEntity
188             nbOfFam = group.getNumberOfFamilies()
189             print "  -Number Of Families:",nbOfFam
190             for k in range(nbOfFam):
191                 print "    * Family:",group.getFamily(k+1).getName()
192             print "  -Entities list:"
193             if (groupBool):
194                 print "  -Is on all entities"
195             else:
196                 nbOfTypes = group.getNumberOfTypes()
197                 types = group.getTypes()
198                 print "  -Number Of Types:",nbOfTypes
199                 for k in range(nbOfTypes):
200                     type = types[k]
201                     nbOfElmtsOfType = group.getNumberOfElements(type)
202                     number = group.getNumber(type)
203                     print "    * Type",type
204                     print "    * Number",number[0:nbOfElmtsOfType]
205                 print ""
206         print ""
207
208 print "Printing of this mesh in med and vtk format with the name ", mesh.getName()
209
210 idMed = mesh.addDriver(MED_DRIVER,medFile,mesh1Name)
211 mesh.write(idMed)
212
213 idVtk = mesh.addDriver(VTK_DRIVER,vtkFile,mesh2Name)
214 mesh.write(idVtk)
215 print ""
216 print "Mounting this mesh using the MED driver"
217 print ""
218
219 mesh1 = MESH()
220 mesh1Driver = MED_MESH_RDONLY_DRIVER(medFile,mesh1)
221
222 mesh1Driver.setMeshName(mesh1Name)
223
224 mesh1Driver.open()
225 mesh1Driver.read()
226 mesh1Driver.close()
227
228 #print mesh
229
230 mesh_name = mesh1Driver.getMeshName()
231 meshName = mesh1.getName()
232 spaceDim = mesh1.getSpaceDimension()
233 meshDim = mesh1.getMeshDimension()
234 print "The mesh ",meshName," is a ",spaceDim,"D mesh on a ",meshDim,"D geometry"
235 nbNodes = mesh1.getNumberOfNodes()
236 print "The mesh has",nbNodes,"Nodes"
237 coordSyst = mesh1.getCoordinatesSystem()
238 print "The coordinates system is",coordSyst
239 print "The Coordinates :"
240 coordNames = []
241 coordUnits = []
242 for isd in range(spaceDim):
243     coordNames.append(mesh1.getCoordinateName(isd))
244     coordUnits.append(mesh1.getCoordinateUnit(isd))
245
246 print "names:", coordNames
247 print "units", coordUnits
248 print "values:"
249 coordinates = mesh1.getCoordinates(MED_FULL_INTERLACE)
250 for k in range(nbNodes):
251     kp1 = k+1
252     coords = []
253     for isd in range(spaceDim):
254         isdp1 = isd+1
255         coords.append(mesh1.getCoordinate(kp1,isdp1))
256
257     print coords," ---- ", coordinates[k*spaceDim:((k+1)*spaceDim)]
258
259 print ""
260 print "Show the Nodal Connectivity:"
261 nbTypesCell = mesh1.getNumberOfTypes(MED_CELL)
262 print ""
263 if (nbTypesCell>0):
264     print "The Mesh has",nbTypesCell,"Type(s) of Cell"
265     types = mesh1.getTypes(MED_CELL)
266     for k in range(nbTypesCell):
267         type = types[k]
268         nbElemType = mesh1.getNumberOfElements(MED_CELL,type)
269         print "For the type:",type,"there is(are)",nbElemType,"elemnt(s)"
270         connectivity = mesh1.getConnectivity(MED_FULL_INTERLACE,MED_NODAL,MED_CELL,type)
271         nbNodesPerCell = type%100
272         for j in range(nbElemType):
273             print "Element",(j+1)," ",connectivity[j*nbNodesPerCell:(j+1)*nbNodesPerCell]
274
275 print ""
276 print "Show the Reverse Nodal Connectivity:"
277 ReverseConnectivity = mesh1.getReverseConnectivity(MED_NODAL)
278 ReverseConnectivityIndex = mesh1.getReverseConnectivityIndex(MED_NODAL)
279 print ""
280 for j in range(nbNodes):
281     begin = ReverseConnectivityIndex[j]-1
282     end = ReverseConnectivityIndex[j+1]-1
283     print "Node",(j+1),"-->",ReverseConnectivity[begin:end]
284
285 print ""
286 print "Show the Descending Connectivity:"
287 mesh1.calculateConnectivity(MED_FULL_INTERLACE,MED_DESCENDING,MED_CELL)
288 nbElemts = mesh1.getNumberOfElements(MED_CELL,MED_ALL_ELEMENTS)
289 Connectivity = mesh1.getConnectivity(MED_FULL_INTERLACE,MED_DESCENDING,MED_CELL,MED_ALL_ELEMENTS)
290 ConnectivityIndex = mesh1.getConnectivityIndex(MED_DESCENDING,MED_CELL)
291 print ""
292 for j in range(nbElemts):
293     begin = ConnectivityIndex[j]-1
294     end = ConnectivityIndex[j+1]-1
295     print "Element",(j+1),"-->",Connectivity[begin:end]
296
297 print ""
298 for entity in [MED_NODE,MED_CELL,MED_FACE,MED_EDGE]:
299     nbFam = mesh1.getNumberOfFamilies(entity)
300     nbGrp = mesh1.getNumberOfGroups(entity)
301     if (entity == MED_NODE) :
302         if (nbFam > 0) : print "This mesh has",nbFam,"Node Family(ies)"
303         if (nbGrp > 0) : print "This mesh has",nbGrp,"Node Group(s)"
304     elif (entity == MED_CELL) :
305         if (nbFam > 0) : print "This mesh has",nbFam,"Cell Family(ies)"
306         if (nbGrp > 0) : print "This mesh has",nbGrp,"Cell Group(s)"
307     elif (entity == MED_FACE) :
308         if (nbFam > 0) : print "This mesh has",nbFam,"Face Family(ies)"
309         if (nbGrp > 0) : print "This mesh has",nbGrp,"Face Group(s)"
310     elif (entity == MED_EDGE) :
311         if (nbFam > 0) : print "This mesh has",nbFam,"Edge Family(ies)"
312         if (nbGrp > 0) : print "This mesh has",nbGrp,"Edge Group(s)"
313
314 for entity in [MED_NODE,MED_CELL,MED_FACE,MED_EDGE]:
315     nbFam = mesh1.getNumberOfFamilies(entity)
316     nbGrp = mesh1.getNumberOfGroups(entity)
317     if nbFam > 0:
318         for j in range(nbFam):
319             print ""
320             family = mesh1.getFamily(entity,j+1)
321             familyName = family.getName()
322             familyDescription = family.getDescription()
323             familyEntity = family.getEntity()
324             familyBool = family.isOnAllElements()
325             print "  -Name:",familyName
326             print "  -Description:",familyDescription
327             print "  -Entity:",familyEntity
328             familyIdentifier = family.getIdentifier()
329             nbOfAtt = family.getNumberOfAttributes()
330             print "  -Identifier:",familyIdentifier
331             print "  -Number Of Attributes:",nbOfAtt
332             attributesids = family.getAttributesIdentifiers()
333             attributesvals = family.getAttributesValues()
334             for k in range(nbOfAtt):
335                 print "    * Attributes:",attributesids[k],":",attributesvals[k],",",family.getAttributeDescription(k+1)
336             nbOfGrp = family.getNumberOfGroups()
337             print "  -Number Of Groups:",nbOfGrp
338             for k in range(nbOfGrp):
339                 print "    * Group:",family.getGroupName(k+1)
340             print "  -Entities list:"
341             if (familyBool):
342                 print "  -Is on all entities"
343             else:
344                 nbOfTypes = family.getNumberOfTypes()
345                 types = family.getTypes()
346                 print "  -Number Of Types:",nbOfTypes
347                 for k in range(nbOfTypes):
348                     type = types[k]
349                     nbOfElmtsOfType = family.getNumberOfElements(type)
350                     number = family.getNumber(type)
351                     print "    * Type",type
352                     print "    * Number",number[0:nbOfElmtsOfType]
353                 print ""
354     print ""
355
356     if nbGrp > 0:
357         for j in range(nbGrp):
358             print ""
359             group = mesh1.getGroup(entity,j+1)
360             groupName = group.getName()
361             groupDescription = group.getDescription()
362             groupEntity = group.getEntity()
363             groupBool = group.isOnAllElements()
364             print "  -Name:",groupName
365             print "  -Description:",groupDescription
366             print "  -Entity:",groupEntity
367             nbOfFam = group.getNumberOfFamilies()
368             print "  -Number Of Families:",nbOfFam
369             for k in range(nbOfFam):
370                 print "    * Family:",group.getFamily(k+1).getName()
371             print "  -Entities list:"
372             if (groupBool):
373                 print "  -Is on all entities"
374             else:
375                 nbOfTypes = group.getNumberOfTypes()
376                 types = group.getTypes()
377                 print "  -Number Of Types:",nbOfTypes
378                 for k in range(nbOfTypes):
379                     type = types[k]
380                     nbOfElmtsOfType = group.getNumberOfElements(type)
381                     number = group.getNumber(type)
382                     print "    * Type",type
383                     print "    * Number",number[0:nbOfElmtsOfType]
384                 print ""
385         print ""
386
387 print "END of the Pyhton script ..... Ctrl D to exit"