Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/med.git] / src / MEDMEM_SWIG / med_opfield_test.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 ############################################################################
20 #
21 # this Python script is testing all operations between FIELD(DOUBLE,INT)
22 #
23 ############################################################################
24
25 from libMEDMEM_Swig import *
26 from random import *
27 import os
28 #
29 #befor running this script, please be sure about the path the file fileName
30 #
31 filePath=os.environ["MED_ROOT_DIR"]
32 filePath=filePath+"/share/salome/resources/med/"
33
34 medFile = filePath + "pointe.med"
35
36 def add_one(i):
37     return i+1
38
39 def print_ord(i):
40     if i == 0:
41         return 'first'
42     elif i == 1:
43         return 'second'
44     elif i == 2:
45         return 'third'
46     else:
47         return `i`+'th'
48
49 md = MED()
50
51 mdDriver = MED_MED_RDONLY_DRIVER(medFile,md)
52
53 mdDriver.open()
54 mdDriver.readFileStruct()
55 mdDriver.close()
56
57 nbMeshes = md.getNumberOfMeshes()
58
59 nbFields = md.getNumberOfFields()
60
61 print "The med file", medFile, "contains", nbMeshes, "mesh(es) and", nbFields, "field(s)"
62
63 if (nbMeshes>0):
64     print "Mesh(es) Name(s) is(are) "
65
66     for i in range(nbMeshes):
67         mesh_name = md.getMeshName(i)
68         print "   - ",mesh_name
69
70 if (nbFields>0):
71     print "Field(s) Name(s) is(are) "
72
73     for i in range(nbFields):
74         field_name = md.getFieldName(i)
75         print "   - ",field_name
76
77 print ""
78
79 mesh_name = md.getMeshName(0)
80 mesh = md.getMesh(mesh_name)
81 mesh.read()
82 spaceDim = mesh.getSpaceDimension()
83 meshDim = mesh.getMeshDimension()
84 nbNodes = mesh.getNumberOfNodes()
85 print "The mesh",mesh_name,"is a",spaceDim,"D mesh on a",meshDim,"D geometry and has",nbNodes,"Nodes"
86
87 if (nbFields>0):
88     print "Updating supports in the Med Object"
89     md.updateSupport()
90     print ""
91     print "Field(s) Analysis "
92     for i in range(nbFields):
93         print ""
94         field_name = md.getFieldName(i)
95         nbOfIt = md.getFieldNumberOfIteration(field_name)
96         print "The",print_ord(i),"field is",field_name,"with",nbOfIt,"iteration(s)"
97         for j in range(nbOfIt):
98             print ""
99             dtitfield = md.getFieldIteration(field_name,j)
100             dt = dtitfield.getdt()
101             it = dtitfield.getit()
102             field = md.getField(field_name,dt,it)
103             type = field.getValueType()
104             print "     * Iteration:",dt,"Order number:",it,"Type:",type
105             if type == MED_INT32:
106                 fieldint = createFieldIntFromField(field)
107                 fieldint.read()
108                 fieldint.getSupport().update()
109                 name = fieldint.getName()
110                 desc = fieldint.getDescription()
111                 nbOfComp = fieldint.getNumberOfComponents()
112                 print "     Field",name," : ",desc
113                 print "     Number Of Components:",nbOfComp
114                 iterationNb = fieldint.getIterationNumber()
115                 orderNb = fieldint.getOrderNumber()
116                 time = fieldint.getTime()
117                 print "     Iteration Number",iterationNb
118                 print "     Order Number",orderNb
119                 print "     Time",time
120                 print "Norme  2  : ", fieldint.norm2()
121                 print "Norme Max : ", fieldint.normMax()
122
123                 if fielddouble.getSupport().getEntity()!=MED_NODE:
124                     fieldint_vol=fieldint.getSupport().getMesh().getVolume(fieldint.getSupport())
125                     print "Norme L1  : ", fieldint.normL1()
126                     print "Norme L2  : ", fieldint.normL2()
127                     print "Norme L2(vol) : ", fieldint.normL2(fieldint_vol)
128
129                 for k in range(nbOfComp):
130                     kp1 = k+1
131                     compName = fieldint.getComponentName(kp1)
132                     compDesc = fieldint.getComponentDescription(kp1)
133                     compUnit = fieldint.getMEDComponentUnit(kp1)
134                     print "      * Component:",kp1
135                     print "          Name:",compName
136                     print "          Description:",compDesc
137                     print "          Unit:",compUnit
138                     if fielddouble.getSupport().getEntity()!=MED_NODE:
139                         print "          Norme L1  : ", fieldint.normL1(kp1)
140                         print "          Norme L2  : ", fieldint.normL2(kp1)
141                         print "          Norme L2(vol) : ", fieldint.normL2(kp1,fieldint_vol)
142
143                 support = fieldint.getSupport()
144                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
145                 print "     Values:",nbOf
146                 for k in range(nbOf):
147                     valueI = fieldint.getRow(k+1)
148                     print "     *",valueI[:nbOfComp]
149                 fieldint2 = FIELDINT(fieldint)
150                 print ""
151                 fieldintadd = fieldint + fieldint2
152                 print "Test of the addition of two integer fields with creation a new one"
153                 print ""
154                 name = fieldintadd.getName()
155                 desc = fieldintadd.getDescription()
156                 nbOfComp = fieldintadd.getNumberOfComponents()
157                 print "     Field",name," : ",desc
158                 print "     Number Of Components:",nbOfComp
159                 iterationNb = fieldintadd.getIterationNumber()
160                 orderNb = fieldintadd.getOrderNumber()
161                 time = fieldintadd.getTime()
162                 print "     Iteration Number",iterationNb
163                 print "     Order Number",orderNb
164                 print "     Time",time
165                 for k in range(nbOfComp):
166                     kp1 = k+1
167                     compName = fieldintadd.getComponentName(kp1)
168                     compDesc = fieldintadd.getComponentDescription(kp1)
169                     compUnit = fieldintadd.getMEDComponentUnit(kp1)
170                     print "      * Component:",kp1
171                     print "          Name:",compName
172                     print "          Description:",compDesc
173                     print "          Unit:",compUnit
174
175                 support = fieldintadd.getSupport()
176                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
177                 print "     Values:",nbOf
178                 for k in range(nbOf):
179                     valueI = fieldintadd.getRow(k+1)
180                     print "     *",valueI[:nbOfComp]
181                 print ""
182                 fieldintsub = fieldint - fieldint2
183                 print "Test of the substraction of two integer fields with creation a new one"
184                 print ""
185                 name = fieldintsub.getName()
186                 desc = fieldintsub.getDescription()
187                 nbOfComp = fieldintsub.getNumberOfComponents()
188                 print "     Field",name," : ",desc
189                 print "     Number Of Components:",nbOfComp
190                 iterationNb = fieldintsub.getIterationNumber()
191                 orderNb = fieldintsub.getOrderNumber()
192                 time = fieldintsub.getTime()
193                 print "     Iteration Number",iterationNb
194                 print "     Order Number",orderNb
195                 print "     Time",time
196                 for k in range(nbOfComp):
197                     kp1 = k+1
198                     compName = fieldintsub.getComponentName(kp1)
199                     compDesc = fieldintsub.getComponentDescription(kp1)
200                     compUnit = fieldintsub.getMEDComponentUnit(kp1)
201                     print "      * Component:",kp1
202                     print "          Name:",compName
203                     print "          Description:",compDesc
204                     print "          Unit:",compUnit
205
206                 support = fieldintsub.getSupport()
207                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
208                 print "     Values:",nbOf
209                 for k in range(nbOf):
210                     valueI = fieldintsub.getRow(k+1)
211                     print "     *",valueI[:nbOfComp]
212                 print ""
213                 fieldintmul = fieldint * fieldint2
214                 print "Test of the multiplication of two integer fields with creation a new one"
215                 print ""
216                 name = fieldintmul.getName()
217                 desc = fieldintmul.getDescription()
218                 nbOfComp = fieldintmul.getNumberOfComponents()
219                 print "     Field",name," : ",desc
220                 print "     Number Of Components:",nbOfComp
221                 iterationNb = fieldintmul.getIterationNumber()
222                 orderNb = fieldintmul.getOrderNumber()
223                 time = fieldintmul.getTime()
224                 print "     Iteration Number",iterationNb
225                 print "     Order Number",orderNb
226                 print "     Time",time
227                 for k in range(nbOfComp):
228                     kp1 = k+1
229                     compName = fieldintmul.getComponentName(kp1)
230                     compDesc = fieldintmul.getComponentDescription(kp1)
231                     compUnit = fieldintmul.getMEDComponentUnit(kp1)
232                     print "      * Component:",kp1
233                     print "          Name:",compName
234                     print "          Description:",compDesc
235                     print "          Unit:",compUnit
236
237                 support = fieldintmul.getSupport()
238                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
239                 print "     Values:",nbOf
240                 for k in range(nbOf):
241                     valueI = fieldintmul.getRow(k+1)
242                     print "     *",valueI[:nbOfComp]
243                 print ""
244                 try:
245                     fieldintdiv = fieldint / fieldint2
246                     print "Test of the division of two integer fields with creation a new one"
247                     print ""
248                     name = fieldintdiv.getName()
249                     desc = fieldintdiv.getDescription()
250                     nbOfComp = fieldintdiv.getNumberOfComponents()
251                     print "     Field",name," : ",desc
252                     print "     Number Of Components:",nbOfComp
253                     iterationNb = fieldintdiv.getIterationNumber()
254                     orderNb = fieldintdiv.getOrderNumber()
255                     time = fieldintdiv.getTime()
256                     print "     Iteration Number",iterationNb
257                     print "     Order Number",orderNb
258                     print "     Time",time
259                     for k in range(nbOfComp):
260                         kp1 = k+1
261                         compName = fieldintdiv.getComponentName(kp1)
262                         compDesc = fieldintdiv.getComponentDescription(kp1)
263                         compUnit = fieldintdiv.getMEDComponentUnit(kp1)
264                         print "      * Component:",kp1
265                         print "          Name:",compName
266                         print "          Description:",compDesc
267                         print "          Unit:",compUnit
268
269                     support = fieldintdiv.getSupport()
270                     nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
271                     print "     Values:",nbOf
272                     for k in range(nbOf):
273                         valueI = fieldintdiv.getRow(k+1)
274                         print "     *",valueI[:nbOfComp]
275
276                 except:
277                     print "fieldintdiv = fieldint / fieldint2 catch/except error"
278             elif type == MED_REEL64:
279                 fielddouble = createFieldDoubleFromField(field)
280                 fielddouble.read()
281                 fielddouble.getSupport().update()
282                 name = fielddouble.getName()
283                 desc = fielddouble.getDescription()
284                 nbOfComp = fielddouble.getNumberOfComponents()
285                 print "     Field",name," : ",desc
286                 print "     Number Of Components:",nbOfComp
287                 iterationNb = fielddouble.getIterationNumber()
288                 orderNb = fielddouble.getOrderNumber()
289                 time = fielddouble.getTime()
290                 print "     Iteration Number",iterationNb
291                 print "     Order Number",orderNb
292                 print "     Time",time
293                 print "Norme  2  : ", fielddouble.norm2()
294                 print "Norme Max : ", fielddouble.normMax()
295                 print "try sobolev",fielddouble.getSupport().getEntity()
296                 if fielddouble.getSupport().getEntity()!=MED_NODE:
297                     if (spaceDim == 3) :
298                         fielddouble_vol=fielddouble.getSupport().getMesh().getVolume(fielddouble.getSupport())
299                     elif (spaceDim == 2):
300                         fielddouble_vol=fielddouble.getSupport().getMesh().getArea(fielddouble.getSupport())
301                     print "Norme L1  : ", fielddouble.normL1()
302                     print "Norme L2  : ", fielddouble.normL2()
303                     print "Norme L2(vol) : ", fielddouble.normL2(fielddouble_vol)
304                     
305                 for k in range(nbOfComp):
306                     kp1 = k+1
307                     compName = fielddouble.getComponentName(kp1)
308                     compDesc = fielddouble.getComponentDescription(kp1)
309                     compUnit = fielddouble.getMEDComponentUnit(kp1)
310                     print "      * Component:",kp1
311                     print "          Name:",compName
312                     print "          Description:",compDesc
313                     print "          Unit:",compUnit
314                     if fielddouble.getSupport().getEntity()!=MED_NODE:
315                         print "          Norme L1  : ", fielddouble.normL1(kp1)
316                         print "          Norme L2  : ", fielddouble.normL2(kp1)
317                         print "          Norme L2(vol) : ", fielddouble.normL2(kp1, fielddouble_vol)
318
319                 support = fielddouble.getSupport()
320                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
321                 print "     Values:",nbOf
322                 for k in range(nbOf):
323                     valueI = fielddouble.getRow(k+1)
324                     print "     *",valueI[:nbOfComp]
325                 fielddouble2 = FIELDDOUBLE(fielddouble)
326                 print ""
327                 fielddoubleadd = fielddouble + fielddouble2
328                 print "Test of the addition of two double fields with creation a new one"
329                 print ""
330                 name = fielddoubleadd.getName()
331                 desc = fielddoubleadd.getDescription()
332                 nbOfComp = fielddoubleadd.getNumberOfComponents()
333                 print "     Field",name," : ",desc
334                 print "     Number Of Components:",nbOfComp
335                 iterationNb = fielddoubleadd.getIterationNumber()
336                 orderNb = fielddoubleadd.getOrderNumber()
337                 time = fielddoubleadd.getTime()
338                 print "     Iteration Number",iterationNb
339                 print "     Order Number",orderNb
340                 print "     Time",time
341                 for k in range(nbOfComp):
342                     kp1 = k+1
343                     compName = fielddoubleadd.getComponentName(kp1)
344                     compDesc = fielddoubleadd.getComponentDescription(kp1)
345                     compUnit = fielddoubleadd.getMEDComponentUnit(kp1)
346                     print "      * Component:",kp1
347                     print "          Name:",compName
348                     print "          Description:",compDesc
349                     print "          Unit:",compUnit
350
351                 support = fielddoubleadd.getSupport()
352                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
353                 print "     Values:",nbOf
354                 for k in range(nbOf):
355                     valueI = fielddoubleadd.getRow(k+1)
356                     print "     *",valueI[:nbOfComp]
357                 print ""
358                 fielddoublesub = fielddouble - fielddouble2
359                 print "Test of the substraction of two double fields with creation a new one"
360                 print ""
361                 name = fielddoublesub.getName()
362                 desc = fielddoublesub.getDescription()
363                 nbOfComp = fielddoublesub.getNumberOfComponents()
364                 print "     Field",name," : ",desc
365                 print "     Number Of Components:",nbOfComp
366                 iterationNb = fielddoublesub.getIterationNumber()
367                 orderNb = fielddoublesub.getOrderNumber()
368                 time = fielddoublesub.getTime()
369                 print "     Iteration Number",iterationNb
370                 print "     Order Number",orderNb
371                 print "     Time",time
372                 for k in range(nbOfComp):
373                     kp1 = k+1
374                     compName = fielddoublesub.getComponentName(kp1)
375                     compDesc = fielddoublesub.getComponentDescription(kp1)
376                     compUnit = fielddoublesub.getMEDComponentUnit(kp1)
377                     print "      * Component:",kp1
378                     print "          Name:",compName
379                     print "          Description:",compDesc
380                     print "          Unit:",compUnit
381
382                 support = fielddoublesub.getSupport()
383                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
384                 print "     Values:",nbOf
385                 for k in range(nbOf):
386                     valueI = fielddoublesub.getRow(k+1)
387                     print "     *",valueI[:nbOfComp]
388                 print ""
389                 fielddoublemul = fielddouble * fielddouble2
390                 print "Test of the multiplication of two double fields with creation a new one"
391                 print ""
392                 name = fielddoublemul.getName()
393                 desc = fielddoublemul.getDescription()
394                 nbOfComp = fielddoublemul.getNumberOfComponents()
395                 print "     Field",name," : ",desc
396                 print "     Number Of Components:",nbOfComp
397                 iterationNb = fielddoublemul.getIterationNumber()
398                 orderNb = fielddoublemul.getOrderNumber()
399                 time = fielddoublemul.getTime()
400                 print "     Iteration Number",iterationNb
401                 print "     Order Number",orderNb
402                 print "     Time",time
403                 for k in range(nbOfComp):
404                     kp1 = k+1
405                     compName = fielddoublemul.getComponentName(kp1)
406                     compDesc = fielddoublemul.getComponentDescription(kp1)
407                     compUnit = fielddoublemul.getMEDComponentUnit(kp1)
408                     print "      * Component:",kp1
409                     print "          Name:",compName
410                     print "          Description:",compDesc
411                     print "          Unit:",compUnit
412
413                 support = fielddoublemul.getSupport()
414                 nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
415                 print "     Values:",nbOf
416                 for k in range(nbOf):
417                     valueI = fielddoublemul.getRow(k+1)
418                     print "     *",valueI[:nbOfComp]
419                 print ""
420                 try:
421                     fielddoublediv = fielddouble / fielddouble2
422                     print "Test of the division of two double fields with creation a new one"
423                     print ""
424                     name = fielddoublediv.getName()
425                     desc = fielddoublediv.getDescription()
426                     nbOfComp = fielddoublediv.getNumberOfComponents()
427                     print "     Field",name," : ",desc
428                     print "     Number Of Components:",nbOfComp
429                     iterationNb = fielddoublediv.getIterationNumber()
430                     orderNb = fielddoublediv.getOrderNumber()
431                     time = fielddoublediv.getTime()
432                     print "     Iteration Number",iterationNb
433                     print "     Order Number",orderNb
434                     print "     Time",time
435                     for k in range(nbOfComp):
436                         kp1 = k+1
437                         compName = fielddoublediv.getComponentName(kp1)
438                         compDesc = fielddoublediv.getComponentDescription(kp1)
439                         compUnit = fielddoublediv.getMEDComponentUnit(kp1)
440                         print "      * Component:",kp1
441                         print "          Name:",compName
442                         print "          Description:",compDesc
443                         print "          Unit:",compUnit
444
445                     support = fielddoublediv.getSupport()
446                     nbOf = support.getNumberOfElements(MED_ALL_ELEMENTS)
447                     print "     Values:",nbOf
448                     for k in range(nbOf):
449                         valueI = fielddoublediv.getRow(k+1)
450                     print "     *",valueI[:nbOfComp]
451                 except:
452                     print "fielddoublediv = fielddouble / fielddouble2 catch/except error"
453             else:
454                 print "  !!!! Bad type of Field !!!!"
455
456 print ""
457 print "TESTS OPERATIONS SUR FIELDDOUBLE : "
458
459
460 fielddoublesub = fielddouble-fielddouble2
461 fielddoublemul = fielddouble*fielddouble2
462
463 try:
464     fielddoublediv = fielddouble/fielddouble2
465 except:
466     pass
467
468 fielddoubleasso = fielddouble+fielddouble2*fielddouble2
469 fielddoubleSP=createFieldDoubleScalarProduct(fielddouble, fielddouble2)
470
471
472 print " f1     : ",fielddouble.getValue()
473 print " f2     : ",fielddouble2.getValue()
474 print "--------------------------------------------------------------------------------------------------------------"
475 print "  +     : ",fielddoubleadd.getValue()
476 print "  -     : ",fielddoublesub.getValue()
477 print "  *     : ",fielddoublemul.getValue()
478
479 try:
480     print "  /     : ",fielddoublediv.getValue()
481 except:
482     pass
483
484 fielddouble+=fielddouble2;
485 print "  +=    : ",fielddouble.getValue()
486 fielddouble-=fielddouble2;
487 print "  -=    : ",fielddouble.getValue()
488 fielddouble*=fielddouble2;
489 print "  *=    : ",fielddouble.getValue()
490 fielddouble/=fielddouble2;
491 print "  /=    : ",fielddouble.getValue()
492 print "f1+f2*f2: ",fielddoubleasso.getValue()
493 fielddouble.applyLin(4,1);
494 print " 4f1+1  : ",fielddouble.getValue()
495 print " f1.f2  : ",fielddoubleSP.getValue()
496 fielddouble2.applyPyFunc(add_one)
497 print " CB:f2+1: ",fielddouble2.getValue()
498
499 print ""
500 print "TESTS OPERATIONS SUR FIELDINT : "
501
502
503 fieldintadd = fieldint+fieldint2
504 fieldintsub = fieldint-fieldint2
505 fieldintmul = fieldint*fieldint2
506
507 try:
508     fieldintdiv = fieldint/fieldint2
509 except:
510     pass
511
512 fieldintasso = fieldint+fieldint*fieldint
513 fieldintSP=createFieldIntScalarProduct(fieldint, fieldint2)
514
515 print " f1     : ",fieldint.getValue()
516 print " f2     : ",fieldint2.getValue()
517 print "--------------------------------------------------------------------------------------------------------------"
518 print "  +     : ",fieldintadd.getValue()
519 print "  -     : ",fieldintsub.getValue()
520 print "  *     : ",fieldintmul.getValue()
521
522 try:
523     print "  /     : ",fieldintdiv.getValue()
524 except:
525     pass
526
527 fieldint+=fieldint2;
528 print "  +=    : ",fieldint.getValue()
529 fieldint-=fieldint2;
530 print "  -=    : ",fieldint.getValue()
531 fieldint*=fieldint2;
532 print "  *=    : ",fieldint.getValue()
533 fieldint/=fieldint2;
534 print "  /=    : ",fieldint.getValue()
535 print "f1+f2*f2: ",fieldintasso.getValue()
536 fieldint.applyLin(4,1);
537 print " 4f1+1  : ",fieldint.getValue()
538 print " f1.f2  : ",fieldintSP.getValue()
539 fieldint2.applyPyFunc(add_one)
540 print " CB:f2+1: ",fieldint2.getValue()
541 myname="toto"
542 fieldint.setName(myname)
543 name = fieldint.getName()
544 print "test de setName : ",name
545 print "END of the Pyhton script ..... Ctrl D to exit"