]> SALOME platform Git repositories - modules/superv.git/blob - idl/MED.idl
Salome HOME
sources v1.2c
[modules/superv.git] / idl / MED.idl
1 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
3 // 
4 //  This library is free software; you can redistribute it and/or 
5 //  modify it under the terms of the GNU Lesser General Public 
6 //  License as published by the Free Software Foundation; either 
7 //  version 2.1 of the License. 
8 // 
9 //  This library is distributed in the hope that it will be useful, 
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 //  Lesser General Public License for more details. 
13 // 
14 //  You should have received a copy of the GNU Lesser General Public 
15 //  License along with this library; if not, write to the Free Software 
16 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
17 // 
18 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
19 //
20 //
21 //
22 //  File   : MED.idl
23 //  $Header$
24
25 /*! 
26 This file contains the main IDL difinitions of the %MED component in %SALOME application.
27 */
28 #ifndef MED_IDL
29 #define MED_IDL
30 /*!
31  \defgroup MED SALOME MED component
32 */
33
34 #include "SALOME_Exception.idl"
35 #include "SALOME_Component.idl"
36 #include "SALOMEDS.idl"
37
38 module Engines {
39   /*!
40     An array of long
41   */
42   typedef sequence<long> long_array;
43   /*!
44     An array of double
45   */
46   typedef sequence<double> double_array;
47   /*!
48     An array of string
49   */
50   typedef sequence<string> string_array;
51   /*!
52     An array of boolean
53   */
54   typedef sequence<boolean> boolean_array;
55
56 };
57 /*! \ingroup MED
58 This package contains a set of interfaces used for %SALOME %MED component.
59 */ 
60
61 module SALOME_MED {
62
63   //  interface FIELD;
64   interface FIELD;
65   interface FAMILY;
66   interface GROUP;
67   interface MESH;
68   interface SUPPORT;
69
70 /*! 
71 This enumeration conatains a set of elements difining the type of geometrical elements which constitue 
72 a %Mesh.
73 */
74   enum medGeometryElement {
75     MED_NONE,
76     MED_POINT1,
77     MED_SEG2,
78     MED_SEG3,
79     MED_TRIA3,
80     MED_QUAD4,
81     MED_TRIA6,
82     MED_QUAD8,
83     MED_TETRA4,
84     MED_PYRA5,
85     MED_PENTA6,
86     MED_HEXA8,
87     MED_TETRA10,
88     MED_PYRA13,
89     MED_PENTA15,
90     MED_HEXA20,
91     MED_ALL_ELEMENTS
92   };
93 /*! 
94 This enumeration conatains a set of elements difining the structural elements (entities) which constitue 
95 a %Mesh.
96 */
97
98   enum medEntityMesh {
99     MED_CELL,
100     MED_FACE,
101     MED_EDGE,
102     MED_NODE,
103     MED_ALL_ENTITIES
104   };
105
106   enum medModeSwitch {
107     MED_FULL_INTERLACE,
108     MED_NO_INTERLACE
109   };
110
111   enum medConnectivity {
112     MED_NODAL,
113     MED_DESCENDING
114   };
115 /*! 
116 This enumeration conatains a set of elements difining the type of driver.
117 */
118
119   enum medDriverTypes {
120     MED_DRIVER , /*!<This driver is used for reading into memory of the mesh from %MED file.*/
121     VTK_DRIVER , /*!<This driver is used for visualization of the mesh imported from %MED file.*/
122     NO_DRIVER    
123   };
124
125   /*!
126     An array of <VAR>medGeometryElement</VAR>
127   */
128   typedef sequence<medGeometryElement> medGeometryElement_array;
129   /*!
130     An array of %FAMILY
131   */
132   typedef sequence<FAMILY> Family_array;
133   /*!
134     An array of %GROUP
135   */
136   typedef sequence<GROUP> Group_array;
137   
138   // ----------------------
139   // mesh interface
140   // ----------------------
141
142   interface MESH {
143     // Index range begins from 1
144
145     // General Informations
146     //---------------------
147
148     /*!
149       Returns the name of the mesh .
150     */
151     string getName() raises (SALOME::SALOME_Exception);
152     
153     /*!
154       Returns space dimension.
155     */
156     long getSpaceDimension() raises (SALOME::SALOME_Exception);
157
158     /*!
159       Returns mesh dimension.
160       
161       Example :
162       - we have only MED_TETRA4 in MED_CELL : MeshDimension = 3D
163       - we have only MED_QUAD4 in MED_CELL : MeshDimension = 2D
164       - we have both MED_SEG2 and MED_TRIA3 in MED_CELL : MeshDimension = 2D
165     */
166     long getMeshDimension() raises (SALOME::SALOME_Exception);
167
168     // Coordinates
169     //------------
170
171     /*!
172       Returns coordinate system :
173       - "CARTESIAN"
174       - "CYLINDRICAL"
175       - "SPHERICAL"
176     */
177     string getCoordinateSystem() raises (SALOME::SALOME_Exception); 
178
179     /*!
180       Returns the number of nodes defined in the mesh.
181     */
182     long getNumberOfNodes() raises (SALOME::SALOME_Exception);
183
184     /*!
185       Returns an array of coordinates  :
186       - X1,Y1,Z1,X2,Y2,...,Zn if MED_FULL_INTERLACE
187       - X1,X2,...Xn,Y1,Y2,...Zn if MED_NO_INTERLACE
188     */
189     Engines::double_array getCoordinates(in medModeSwitch typeSwitch)
190       raises (SALOME::SALOME_Exception);
191
192     /*!
193       Returns an array containing the names of coordinates.
194       
195       Example :
196       - x,y,z
197       - r,teta,phi
198       - ...
199       
200       It could be empty.
201     */
202     Engines::string_array getCoordinatesNames()
203       raises (SALOME::SALOME_Exception);
204
205     /*!
206       Returns an array containing the units of coordinates (cm, m, mm, ...)
207
208       It could be empty. By defult IS is used (meter).
209     */
210     Engines::string_array getCoordinatesUnits()
211       raises (SALOME::SALOME_Exception);
212
213     // Connectivity
214     // ------------
215
216     /*!
217       Returns the number of different <VAR>medGeometryElement</VAR> types existing 
218       in the specified entity.
219
220       \note 
221       Not implemented for MED_ALL_ENTITIES.
222     */
223     long getNumberOfTypes(in medEntityMesh entity)
224       raises (SALOME::SALOME_Exception);
225
226     /*!
227       Returns an array of all <VAR>medGeometryElement</VAR> types existing 
228       in the mesh.
229
230       \note 
231        Not implemented for MED_ALL_ENTITIES.
232     */
233     medGeometryElement_array getTypes(in medEntityMesh entity)
234       raises (SALOME::SALOME_Exception);
235
236     /*!
237       Returns the number of elements of type <VAR>medGeometryElement</VAR>.
238
239       Note : 
240       - Implemented for MED_ALL_ELEMENTS
241       - Not implemented for MED_ALL_ENTITIES
242     */
243     long getNumberOfElements(in medEntityMesh entity,
244                              in medGeometryElement geomElement)
245       raises (SALOME::SALOME_Exception);
246
247     /*!
248       Give, in full or no interlace mode (for nodal connectivity),
249       descending or nodal connectivity.
250
251       You must give a <VAR>medEntityMesh</VAR> (ie:MED_EDGE) and a 
252       <VAR>medGeometryElement</VAR> (ie:MED_SEG3).
253     */
254     Engines::long_array getConnectivity(in medModeSwitch typeSwitch,
255                                         in medConnectivity mode,
256                                         in medEntityMesh entity,
257                                         in medGeometryElement geomElement)
258       raises (SALOME::SALOME_Exception);
259
260     /*!
261       Give morse index array to use with 
262       getConnectivity(MED_FULL_INTERLACE,mode,entity,MED_ALL_ELEMENTS).
263
264       Each value give start index for corresponding entity in 
265       connectivity array.
266
267       Example : i-th element, j-th node of it :
268       - In C mode : Connectivity[ConnectivityIndex[i]-1+j-1]
269       - In fortran mode : Connectivity[ConnectivityIndex[i]+j]
270     */
271     Engines::long_array getConnectivityIndex(in medConnectivity mode,
272                                              in medEntityMesh entity)
273       raises (SALOME::SALOME_Exception);
274
275     /*!
276       Gets a global number of the element which have the same connectivity as the  
277       connectivity argument.
278     */
279     long getElementNumber(in medConnectivity mode, 
280                           in medEntityMesh entity, 
281                           in medGeometryElement type, 
282                           in Engines::long_array connectivity) 
283       raises (SALOME::SALOME_Exception);
284
285     /*!
286       Returns a reverse connectivity to MED_CELL.
287
288       If mode=MED_NODAL, the array contains, for each node, all cells 
289       arround it.
290
291       If mode=MED_DESCENDING, the array contains, for each face (or edge), 
292       the 2 cells of each side. First is cell which face normal is outgoing.
293     */
294     Engines::long_array getReverseConnectivity(in medConnectivity mode)
295       raises (SALOME::SALOME_Exception);
296
297     /*!
298       Give index array to use with getReverseConnectivity(MED_NODAL).
299
300       This method is not used with MED_DESCENDING mode, 
301       because we have allways two cells.
302
303       See getConnectivityIndex for details.
304     */
305     Engines::long_array getReverseConnectivityIndex(in medConnectivity mode)
306       raises (SALOME::SALOME_Exception);
307
308     // Families and Groups
309     // -------------------
310
311     /*!
312       Returns the number of all families.
313     */
314     long getNumberOfFamilies(in medEntityMesh entity)
315       raises (SALOME::SALOME_Exception);
316
317     /*!
318       Returns the number of all groups.
319     */
320     long getNumberOfGroups(in medEntityMesh entity)
321       raises (SALOME::SALOME_Exception);
322
323     /*!
324       Returns an array of all families.
325     */
326     Family_array getFamilies(in medEntityMesh entity)
327       raises (SALOME::SALOME_Exception);
328
329     /*!
330       Returns the reference to i-th family.
331
332       \note 
333       i is bounded by 1 and NumberOfFamilies.
334     */
335     FAMILY getFamily(in medEntityMesh entity,in long familyNumber)
336       raises (SALOME::SALOME_Exception);
337
338     /*!
339       Returns an array of all groups.
340     */
341     Group_array getGroups(in medEntityMesh entity)
342       raises (SALOME::SALOME_Exception);
343
344     /*!
345       Returns the reference to i-th group.
346
347       \note 
348      i is bounded by 1 and NumberOfGroups.
349     */
350     GROUP getGroup(in medEntityMesh entity,in long groupNumber)
351       raises (SALOME::SALOME_Exception);
352
353     // Others
354     // ------
355
356     /*!
357       Returns a field on mySupport containing volume.
358
359       \note 
360       mySupport must be on MED_CELL entity and MeshDimension must be 3D.
361     */
362     FIELD getVolume(in SUPPORT mySupport)
363       raises (SALOME::SALOME_Exception);
364
365     /*!
366       Returns a field on mySupport containing area.
367
368       \note 
369       mySupport must be on MED_FACE entity.
370     */
371     FIELD getArea(in SUPPORT mySupport)
372       raises (SALOME::SALOME_Exception);
373
374     /*!
375       Returns a field on mySupport containing length.
376
377     \note
378      mySupport must be on MED_EDGE entity.
379     */
380     FIELD getLength(in SUPPORT mySupport)
381       raises (SALOME::SALOME_Exception);
382
383     /*!
384       Returns a field on mySupport containing normal.
385
386       \note
387       mySupport must be on MED_FACE entity if MeshDimension and 
388       SpaceDimension=3D and on MED_EDGE if MeshDimension and SpaceDimension=2D.
389     */
390     FIELD getNormal(in SUPPORT mySupport)
391       raises (SALOME::SALOME_Exception);
392
393     /*!
394       Returns a field on mySupport containing barycenter.
395     */
396     FIELD getBarycenter(in SUPPORT mySupport)
397       raises (SALOME::SALOME_Exception);
398
399     /*
400       Returns a field on mySupport containing neighbourhood.
401     */
402     // FIELD getNeighbourhood(in SUPPORT mySupport)
403     // raises (SALOME::SALOME_Exception);
404
405     // Read & Write
406     // -----------
407
408     /*!
409       Adds the Mesh in the StudyManager.
410     */
411     void addInStudy(in SALOMEDS::Study myStudy, in MESH myIor )
412       raises (SALOME::SALOME_Exception, SALOMEDS::StudyBuilder::LockProtection);
413
414     //                          Add a MED/VTK/... driver
415     //                          Multiple drivers can be added whatever the type
416     long addDriver     (in medDriverTypes driverType, in string  fileName, in string meshName) 
417                                         raises (SALOME::SALOME_Exception);
418     //                          Remove a driver
419     void rmDriver      (in long i)  raises (SALOME::SALOME_Exception);
420
421    //
422     void read          (in long i)  raises (SALOME::SALOME_Exception);
423     void write         (in long i, in string driverMeshName)  
424                                     raises (SALOME::SALOME_Exception);
425   
426 /*!
427 Internal Corba method. 
428 */ 
429     long getCorbaIndex()        raises (SALOME::SALOME_Exception);
430   };
431
432   
433   // ----------------------
434   // Support interface
435   // ----------------------
436   
437   interface SUPPORT {
438     
439     /*!
440       Returns the name of the support.
441     */
442     string getName() raises (SALOME::SALOME_Exception);
443
444     /*!
445       Returns the description of the support.
446     */
447     string getDescription() raises (SALOME::SALOME_Exception);
448
449     /*!
450       Returns a reference to the mesh.
451     */
452     MESH getMesh() raises (SALOME::SALOME_Exception);
453
454     /*!
455       Returns the type of <VAR>medEntityMesh</VAR> used by the support. 
456
457       \note 
458       A support deals only with one entity's type 
459       (for example : MED_FACE or MED_NODE)
460     */
461     medEntityMesh getEntity() raises (SALOME::SALOME_Exception);
462
463     /*!
464       Returns True if all elements of this entity are
465       engaged, False otherwise.
466
467       If True, you must use mesh reference (getMesh) to get more information.
468     */
469     boolean isOnAllElements() raises (SALOME::SALOME_Exception);
470
471     /*!
472       If the method <VAR>isOnAllElements</VAR> returns False, this method 
473      returns the number of elements in the support.
474
475       Example : number of MED_TRIA3 or MED_ALL_ELEMETNS elements 
476       in entity of support.
477
478       \note 
479       If %SUPPORT is defined on MED_NODE, use MED_NONE <VAR>medGeometryElement</VAR> type.
480     */
481     long getNumberOfElements(in medGeometryElement geomElement)
482       raises (SALOME::SALOME_Exception);
483
484     /*!
485       If isOnAllElements is False, returns an array of <VAR>medGeometryElement</VAR>
486       types used by the support.
487
488       <VAR>medEntityMesh</VAR> is given by getEntity.
489     */
490     medGeometryElement_array getTypes() raises (SALOME::SALOME_Exception);
491
492     /*!
493       If the method <VAR>isOnAllElements</VAR> returns False, this method returns an array which 
494      contains all numbers of given <VAR>medGeometryElement</VAR>.
495
496       Numbering is global, ie numbers are bounded by 1 and 
497       MESH::getNumberOfElement(entity,MED_ALL_ELEMENTS) and not by 1 and 
498       MESH::getNumberOfElement(entity,geomElement).
499
500       \note
501       If %SUPPORT is defined on MED_NODE, use MED_NONE <VAR>medGeometryElement</VAR> type.
502     */
503     Engines::long_array getNumber(in medGeometryElement geomElement)
504       raises (SALOME::SALOME_Exception);
505
506     /*!
507       If the method <VAR>isOnAllElements</VAR> returns False, this method returns the index 
508       of element number.
509       
510       Use it with getNumber(MED_ALL_ELEMENTS). 
511       
512       \note 
513        See the method <VAR>getConnectivityIndex</VAR> for more details.
514     */
515     Engines::long_array getNumberIndex()
516       raises (SALOME::SALOME_Exception);
517     /*!
518       Returns the number of Gauss points for this <VAR>medGeometryElement</VAR>.
519
520       \note 
521       - Not defined if %SUPPORT is on MED_NODE.
522       - Not defined for MED_ALL_ELEMENTS <VAR>medGeometryElement</VAR> type.
523      */
524     long getNumberOfGaussPoints(in medGeometryElement geomElement)
525                                         raises (SALOME::SALOME_Exception);
526 /*!
527 Internal Corba method. 
528 */    
529     long getCorbaIndex()                raises (SALOME::SALOME_Exception);
530   };
531
532
533   //-----------------
534   // Family interface
535   //-----------------
536
537   interface FAMILY : SUPPORT 
538     {
539
540       /*!
541         Returns Family identifier (Identifier
542         of the family in the mesh). 
543
544         \note
545       There is precisely only one indentifier for each family.
546       */
547       long getIdentifier() raises (SALOME::SALOME_Exception);
548
549       /*!
550         Returns number of attributes.
551       */
552       long getNumberOfAttributes() raises (SALOME::SALOME_Exception);
553
554       /*!
555         Returns an array of all attributes' identifiers.
556         There is one for each attribute.
557       */
558       Engines::long_array getAttributesIdentifiers() 
559         raises (SALOME::SALOME_Exception);
560
561       /*!
562         Returns identifier of i-th attribute.
563
564         \note 
565       i is bounded by 1 and NumberOfAttributes.
566       */
567       long getAttributeIdentifier(in long i) raises (SALOME::SALOME_Exception);
568
569       /*!
570         Returns an array of all values of the attributes .
571         There is one value for each attribute.
572       */
573       Engines::long_array getAttributesValues() 
574         raises (SALOME::SALOME_Exception);
575
576       /*!
577         Returns the value of i-th attribute.
578
579         \note 
580       i is bounded by 1 and NumberOfAttributes.
581       */
582       long getAttributeValue(in long i) raises (SALOME::SALOME_Exception);
583
584       /*!
585         Returns an array of all descriptions of the attributes .
586         There is one description for each attribute.
587       */
588       Engines::string_array getAttributesDescriptions() 
589         raises (SALOME::SALOME_Exception);
590
591       /*!
592         Returns the description of i-th attribute.
593
594         \note 
595       i is bounded by 1 and NumberOfAttributes.
596       */
597       string getAttributeDescription(in long i) 
598         raises (SALOME::SALOME_Exception);
599     };
600
601
602   //----------------
603   // Group interface
604   //----------------
605   interface GROUP : SUPPORT 
606     {
607
608       /*!
609         Returns the number of families in this group.
610       */
611       long getNumberOfFamilies() raises (SALOME::SALOME_Exception);
612
613       /*!
614         Returns an array of all families.
615       */
616       Family_array getFamilies() raises (SALOME::SALOME_Exception);
617
618       /*!
619         Returns a reference to the i-th family.
620
621         \note 
622       i is bounded by 1 and NumberOfFamilies.
623       */
624       FAMILY getFamily(in long i) raises (SALOME::SALOME_Exception);
625
626     };
627
628
629   //----------------
630   // Field interface
631   //----------------
632
633   interface FIELD 
634     {
635
636       /*!
637         Returns the field name.
638       */
639       string getName() raises (SALOME::SALOME_Exception);
640
641       /*!
642         Returns the field description.
643       */
644       string getDescription() raises (SALOME::SALOME_Exception);
645
646       /*!
647         Returns a reference to the support
648         on which the field is defined.
649       */
650       SUPPORT getSupport() raises (SALOME::SALOME_Exception);
651
652       /*!
653         Returns the number of field's components.
654       */
655       long getNumberOfComponents() raises (SALOME::SALOME_Exception);
656
657       /*!
658         Returns an array containing components names.
659       */
660       Engines::string_array getComponentsNames() 
661         raises (SALOME::SALOME_Exception);
662
663       /*!
664         Returns the name of i-th component.
665
666         \note  
667         - i is bounded by 1 and NumberOfComponents.
668         - Name is mandatory for each field's component.
669       */
670       string getComponentName(in long i) raises (SALOME::SALOME_Exception);
671
672       /*!
673         Returns an array containing components units.
674       */
675       Engines::string_array getComponentsUnits()
676         raises (SALOME::SALOME_Exception);
677
678       /*!
679         Returns the unit of i-th component.
680
681         \note 
682       i is bounded by 1 and NumberOfComponents.
683       */
684       string getComponentUnit(in long i) raises (SALOME::SALOME_Exception);
685
686
687       long getIterationNumber() raises (SALOME::SALOME_Exception);
688
689       /*!
690         Returns time for this iteration.
691       */
692       double getTime() raises (SALOME::SALOME_Exception);
693
694       /*!
695         Returns order number use for 
696         internal step in this iteration.
697       */
698       long getOrderNumber() raises (SALOME::SALOME_Exception);
699
700       // Read & Write
701       // -----------
702       
703       long addDriver (in medDriverTypes driverType, in string  fileName, in string fieldName) 
704         raises (SALOME::SALOME_Exception);
705       
706       /*!
707      Removes a driver
708      */
709       void rmDriver (in long i)
710         raises (SALOME::SALOME_Exception);
711       
712       //
713       void read (in long i)
714         raises (SALOME::SALOME_Exception);
715
716       /*!
717         Writes a field.
718       */
719       void write (in long i, in string driverFieldName)  
720         raises (SALOME::SALOME_Exception);
721       
722       /*!
723         Adds the Field in the StudyManager.
724       */
725       void addInStudy(in SALOMEDS::Study myStudy, in FIELD myIor )
726         raises (SALOME::SALOME_Exception, SALOMEDS::StudyBuilder::LockProtection);
727
728 /*!
729 Internal Corba method.
730 */
731       long getCorbaIndex()
732         raises (SALOME::SALOME_Exception);
733
734     };
735
736
737   interface FIELDDOUBLE : FIELD {
738
739     /*!
740       Returns an array of values of the field  
741     */
742     Engines::double_array getValue(in medModeSwitch mode)
743       raises (SALOME::SALOME_Exception);
744   };
745
746   interface FIELDINT : FIELD {
747
748     /*!
749       Returns an array of values of the field  
750     */
751     Engines::long_array getValue(in medModeSwitch mode)
752       raises (SALOME::SALOME_Exception);
753
754   };
755
756   // MED interface
757
758   interface MED {
759
760
761     long                   getNumberOfMeshes () raises (SALOME::SALOME_Exception);       
762     long                   getNumberOfFields () raises (SALOME::SALOME_Exception);
763     Engines::string_array  getMeshNames      () raises (SALOME::SALOME_Exception);
764     Engines::string_array  getFieldNames     () raises (SALOME::SALOME_Exception);
765     MESH                   getMeshByName     ( in string  meshName)  raises (SALOME::SALOME_Exception);
766     MESH                   getMesh           ( in FIELD  fieldPtr)   raises (SALOME::SALOME_Exception);
767     FIELD                  getField          ( in string fieldName, 
768                                                in long pasTemps,
769                                                in long numOrdre )    raises (SALOME::SALOME_Exception);
770
771
772     // Add a MED/VTK/... driver to a MED'GEN' object to 
773     // be able to read/write files preserving  meshes<-->fields association
774     // Multiple drivers can be added whatever the type.
775     // The access point in the <long> returned
776     long addDriver     (in medDriverTypes driverType, in string  fileName) 
777                                         raises (SALOME::SALOME_Exception);
778     /*! 
779    Removes the driver
780     */ 
781     void rmDriver      (in long i)  raises (SALOME::SALOME_Exception);
782     /*! 
783     Reads the structure of the %MED file
784     */
785     void readFileStruct(in long i)  raises (SALOME::SALOME_Exception);
786     void writeFrom     (in long i)  raises (SALOME::SALOME_Exception);
787     void write         (in long i)  raises (SALOME::SALOME_Exception);
788
789     void addMesh  (in MESH   ptrMesh   ) raises (SALOME::SALOME_Exception);
790     void addField (in FIELD  ptrField  ) raises (SALOME::SALOME_Exception);
791     
792     void addInStudy (in SALOMEDS::Study myStudy, in MED medPtr) raises (SALOME::SALOME_Exception, SALOMEDS::StudyBuilder::LockProtection);
793   };
794 };
795
796 #endif /* MED_IDL */