Salome HOME
2f70a5df218f895192665f1cb7e2b32174cf151c
[modules/med.git] / src / MEDMEM_SWIG / med_test3.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 # This Python script is parsing a MED file using MED Memory from SALOME platform:
26 # It tests the setValue, setRow and setColum functions on MED fields
27 ###################################################################################
28 #
29 from libMEDMEM_Swig import *
30 from random import *
31 import os
32 #
33 #befor running this script, please be sure about the path the file fileName
34 #
35 filePath=os.environ["MED_ROOT_DIR"]
36 filePath=os.path.join(filePath, "share", "salome", "resources", "med")
37
38 medFile = os.path.join(filePath, "carre_en_quad4_seg2.med")
39 #medFile = os.path.join(filePath, "cube_hexa8_quad4.med")
40
41 def print_ord(i):
42     if i == 0:
43         return 'first'
44     elif i == 1:
45         return 'second'
46     elif i == 2:
47         return 'third'
48     else:
49         return `i`+'th'
50
51 md = MEDFILEBROWSER(medFile)
52
53 nbMeshes = md.getNumberOfMeshes()
54
55 nbFields = md.getNumberOfFields()
56
57 print "The med file", medFile, "contains", nbMeshes, "mesh(es) and", nbFields, "field(s)"
58
59 if (nbMeshes>0):
60     print "Mesh(es) Name(s) is(are) "
61
62     for i in range(nbMeshes):
63         mesh_name = md.getMeshName(i)
64         print "   - ",mesh_name
65
66 if (nbFields>0):
67     print "Field(s) Name(s) is(are) "
68
69     for i in range(nbFields):
70         field_name = md.getFieldName(i)
71         print "   - ",field_name
72
73 print ""
74
75 if (nbMeshes>0):
76     print "Mesh(es) Analysis "
77     for i in range(nbMeshes):
78         mesh_name = md.getMeshName(i)
79         mesh = MESH(MED_DRIVER,md.getFileName(),mesh_name)
80         spaceDim = mesh.getSpaceDimension()
81         for entity in [MED_NODE,MED_CELL,MED_FACE,MED_EDGE]:
82             nbFam = mesh.getNumberOfFamilies(entity)
83             if (entity == MED_NODE) & (nbFam > 0):
84                 print "This mesh has",nbFam,"Node Family(ies)"
85             elif (entity == MED_CELL) & (nbFam > 0):
86                 print "This mesh has",nbFam,"Cell Family(ies)"
87             elif (entity == MED_FACE) & (nbFam > 0):
88                 print "This mesh has",nbFam,"Face Family(ies)"
89             elif (entity == MED_EDGE) & (nbFam > 0):
90                 print "This mesh has",nbFam,"Edge Family(ies)"
91
92             if nbFam > 0:
93                 for j in range(nbFam):
94                     print ""
95                     family = mesh.getFamily(entity,j+1)
96                     familyName = family.getName()
97                     familyDescription = family.getDescription()
98                     familyEntity = family.getEntity()
99                     familyBool = family.isOnAllElements()
100                     print "  -Name:",familyName
101                     print "  -Description:",familyDescription
102                     print "  -Entity:",familyEntity
103                     familyIdentifier = family.getIdentifier()
104                     nbOfAtt = family.getNumberOfAttributes()
105                     print "  -Identifier:",familyIdentifier
106                     print "  -Number Of Attributes:",nbOfAtt
107                     attributesids = family.getAttributesIdentifiers()
108                     attributesvals = family.getAttributesValues()
109                     for k in range(nbOfAtt):
110                         print "    * Attributes:",attributesids[k],":",attributesvals[k],",",family.getAttributeDescription(k+1)
111                     nbOfGrp = family.getNumberOfGroups()
112                     print "  -Number Of Groups:",nbOfGrp
113                     for k in range(nbOfGrp):
114                         print "    * Group:",family.getGroupName(k+1)
115                     print "  -Entities list:"
116                     if (familyBool):
117                         print "  -Is on all entities"
118                     else:
119                         nbOfTypes = family.getNumberOfTypes()
120                         types = family.getTypes()
121                         print "  -Number Of Types:",nbOfTypes
122                         for k in range(nbOfTypes):
123                             type = types[k]
124                             nbOfElmtsOfType = family.getNumberOfElements(type)
125                             number = family.getNumber(type)
126                             print "    * Type",type
127                             print "    * Number",number[0:nbOfElmtsOfType]
128                         print ""
129                         numberFamily = family.getNumber(MED_ALL_ELEMENTS)
130                         print "    * Getting an Integer Field on the family ",familyName
131                         fieldFamilyIntg = FIELDINT(family,spaceDim)
132                         fieldFamilyIntg.setIterationNumber(0)
133                         fieldFamilyIntg.setOrderNumber(0)
134                         fieldFamilyIntg.setTime(0.0)
135                         for kcomp in range(spaceDim):
136                             if kcomp == 0:
137                                 fieldCompName = "comp1"
138                                 fieldCompDesc = "desc1"
139                                 fieldCompUnit = "unit1"
140                             if kcomp == 1:
141                                 fieldCompName = "comp2"
142                                 fieldCompDesc = "desc2"
143                                 fieldCompUnit = "unit2"
144                             if kcomp == 2:
145                                 fieldCompName = "comp2"
146                                 fieldCompDesc = "desc2"
147                                 fieldCompUnit = "unit2"
148
149                             kcomp1 = kcomp+1
150                             fieldFamilyIntg.setComponentName(kcomp1,fieldCompName)
151                             fieldFamilyIntg.setComponentDescription(kcomp1,fieldCompDesc)
152                             fieldFamilyIntg.setMEDComponentUnit(kcomp1,fieldCompUnit)
153                         fieldFamilyName = "Integer Field on "+familyName
154                         fieldFamilyIntg.setName(fieldFamilyName)
155                         field_name = fieldFamilyIntg.getName()
156                         type_field = fieldFamilyIntg.getValueType()
157                         nbOfComp = fieldFamilyIntg.getNumberOfComponents()
158                         print "      The field",field_name,"is with the type",type_field
159                         print "      It has",nbOfComp,"Component(s)"
160                         for kcomp in range(nbOfComp):
161                             kcomp1 = kcomp+1
162                             compName = fieldFamilyIntg.getComponentName(kcomp1)
163                             compDesc = fieldFamilyIntg.getComponentDescription(kcomp1)
164                             compUnit = fieldFamilyIntg.getMEDComponentUnit(kcomp1)
165                             print "      * Component:",kcomp1
166                             print "          Name:",compName
167                             print "          Description:",compDesc
168                             print "          Unit:",compUnit
169
170                         nbOf = fieldFamilyIntg.getSupport().getNumberOfElements(MED_ALL_ELEMENTS)
171                         print "      Values:",nbOf
172                         print "      Randomly set (via setValue) and get (via getValue) to check with the same mode ..!"
173                         value = []
174                         for k in range(nbOf*nbOfComp):
175                             value.append(randint(0,100))
176                         print "      the mode is full interlace"
177                         mode = MED_FULL_INTERLACE
178                         fieldFamilyIntg.setValue(value)
179                         valueverif = fieldFamilyIntg.getValue()
180                         for k in range(nbOf*nbOfComp):
181                             print "      Set/Get Entry * ",value[k]," / ",valueverif[k]
182                         print ""
183                         value = []
184                         for k in range(nbOf*nbOfComp):
185                             value.append(randint(0,100))
186                         print "      the mode is no interlace"
187                         mode = MED_NO_INTERLACE
188                         fieldFamilyIntg.setValue(value)
189                         valueverif = fieldFamilyIntg.getValue()
190                         for k in range(nbOf*nbOfComp):
191                             print "      Set/Get Entry * ",value[k]," / ",valueverif[k]
192                         print ""
193                         print "      Randomly set (via setValue) and get (via getValue) to check with different mode ..!"
194                         value = []
195                         for k in range(nbOf*nbOfComp):
196                             value.append(randint(0,100))
197                         print "      the mode for set is full interlace and no interlace for get"
198                         mode_full = MED_FULL_INTERLACE
199                         mode_no = MED_NO_INTERLACE
200                         fieldFamilyIntg.setValue(value)
201                         valueverif = fieldFamilyIntg.getValue()
202                         for k in range(nbOf*nbOfComp):
203                             print "      Set/Get Entry * ",value[k]," / ",valueverif[k]
204                         print ""
205                         value = []
206                         for k in range(nbOf*nbOfComp):
207                             value.append(randint(0,100))
208                         print "      the mode for set is no interlace and full interlace for get"
209                         fieldFamilyIntg.setValue(value)
210                         valueverif = fieldFamilyIntg.getValue()
211                         for k in range(nbOf*nbOfComp):
212                             print "      Set/Get Entry * ",value[k]," / ",valueverif[k]
213                         print ""
214                         print "      Randomly set (via setRow/setColumn) and get (via getRow/getColumn) to check with the same mode ..!"
215                         value = []
216                         for k in range(nbOf*nbOfComp):
217                             value.append(randint(0,100))
218                         mode = MED_FULL_INTERLACE
219                         print "      the mode is full interlace ", mode
220                         print "      the field interlacing mode ",fieldFamilyIntg.getInterlacingType()
221                         for k in range(nbOf):
222                             valInd = numberFamily[k]
223                             fieldFamilyIntg.setRow(valInd,value[k*nbOfComp:(k+1)*nbOfComp])
224                         valueverif = []
225                         for k in range(nbOf):
226                             valInd = numberFamily[k]
227                             valueverif.extend(fieldFamilyIntg.getRow(valInd))
228                         for k in range(nbOf*nbOfComp):
229                             print "      Set/Get Entry * ",value[k]," / ",valueverif[k]
230                         print ""
231                         value = []
232                         for k in range(nbOf*nbOfComp):
233                             value.append(randint(0,100))
234                         mode = MED_NO_INTERLACE
235                         print "      the mode is no interlace ", mode
236                         print "      the field interlacing mode ",fieldFamilyIntg.getInterlacingType()
237                         for k in range(nbOf):
238                             valInd = numberFamily[k]
239                             fieldFamilyIntg.setRow(valInd,value[k*nbOfComp:(k+1)*nbOfComp])
240                         fieldFamilyIntgOtherMode = createFieldIntConvertNoInterlace(fieldFamilyIntg)
241                         valueverif = []
242                         for k in range(nbOfComp):
243                             valueverif.extend(fieldFamilyIntgOtherMode.getColumn(k+1))
244                         for k in range(nbOf*nbOfComp):
245                             print "      Set/Get Entry * ",value[k]," / ",valueverif[k]
246                         print ""
247 print "END of the Pyhton script ..... Ctrl D to exit"