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