// File: MED.idl // Project: SALOME // Copyright : CEA/DEN/DMSS/LGLS // $Header$ #ifndef MED_IDL #define MED_IDL #include "SALOME_Exception.idl" #include "SALOME_Component.idl" #include "SALOMEDS.idl" module Engines { /*! An array of long */ typedef sequence long_array; /*! An array of double */ typedef sequence double_array; /*! An array of string */ typedef sequence string_array; /*! An array of boolean */ typedef sequence boolean_array; }; module SALOME_MED { // interface FIELD; interface FIELD; interface FAMILY; interface GROUP; interface MESH; interface SUPPORT; enum medGeometryElement { MED_NONE, MED_POINT1, MED_SEG2, MED_SEG3, MED_TRIA3, MED_QUAD4, MED_TRIA6, MED_QUAD8, MED_TETRA4, MED_PYRA5, MED_PENTA6, MED_HEXA8, MED_TETRA10, MED_PYRA13, MED_PENTA15, MED_HEXA20, MED_ALL_ELEMENTS }; enum medEntityMesh { MED_CELL, MED_FACE, MED_EDGE, MED_NODE, MED_ALL_ENTITIES }; enum medModeSwitch { MED_FULL_INTERLACE, MED_NO_INTERLACE }; enum medConnectivity { MED_NODAL, MED_DESCENDING }; enum medDriverTypes { MED_DRIVER , VTK_DRIVER , NO_DRIVER }; /*! An array of medGeometryElement */ typedef sequence medGeometryElement_array; /*! An array of FAMILY */ typedef sequence Family_array; /*! An array of GROUP */ typedef sequence Group_array; // ---------------------- // mesh interface // ---------------------- interface MESH { // Index range begins at 1 // General Informations //--------------------- /*! Returns mesh name. */ string getName() raises (SALOME::SALOME_Exception); /*! Returns space dimension. */ long getSpaceDimension() raises (SALOME::SALOME_Exception); /*! Returns mesh dimension. Example : - we have only MED_TETRA4 in MED_CELL : MeshDimension = 3 - we have only MED_QUAD4 in MED_CELL : MeshDimension = 2 - we have both MED_SEG2 and MED_TRIA3 in MED_CELL : MeshDimension = 2 */ long getMeshDimension() raises (SALOME::SALOME_Exception); // Coordinates //------------ /*! Returns coordinate's system : - "CARTESIAN" - "CYLINDRICAL" - "SPHERICAL" */ string getCoordinateSystem() raises (SALOME::SALOME_Exception); /*! Returns the number of nodes defined in mesh. */ long getNumberOfNodes() raises (SALOME::SALOME_Exception); /*! Returns coordinates array : - X1,Y1,Z1,X2,Y2,...,Zn if MED_FULL_INTERLACE - X1,X2,...Xn,Y1,Y2,...Zn if MED_NO_INTERLACE */ Engines::double_array getCoordinates(in medModeSwitch typeSwitch) raises (SALOME::SALOME_Exception); /*! Returns an array with names of coordinates. Example : - x,y,z - r,teta,phi - ... It could be empty. */ Engines::string_array getCoordinatesNames() raises (SALOME::SALOME_Exception); /*! Returns an array with units of coordinates (cm, m, mm, ...) It could be empty. We suppose we are IS (meter). */ Engines::string_array getCoordinatesUnits() raises (SALOME::SALOME_Exception); // Connectivity // ------------ /*! Returns the number of different types existing in the specified entity. Note : Not implemented for MED_ALL_ENTITIES. */ long getNumberOfTypes(in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Returns an array of all types existing in the mesh. Note : Not implemented for MED_ALL_ENTITIES. */ medGeometryElement_array getTypes(in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Returns the number of elements of type . Note : - Implemented for MED_ALL_ELEMENTS - Not implemented for MED_ALL_ENTITIES */ long getNumberOfElements(in medEntityMesh entity, in medGeometryElement geomElement) raises (SALOME::SALOME_Exception); /*! Give, in full or no interlace mode (for nodal connectivity), descending or nodal connectivity. You must give a (ie:MED_EDGE) and a (ie:MED_SEG3). */ Engines::long_array getConnectivity(in medModeSwitch typeSwitch, in medConnectivity mode, in medEntityMesh entity, in medGeometryElement geomElement) raises (SALOME::SALOME_Exception); /*! Give morse index array to use with getConnectivity(MED_FULL_INTERLACE,mode,entity,MED_ALL_ELEMENTS). Each value give start index for corresponding entity in connectivity array. Example : i-th element, j-th node of it : - In C mode : Connectivity[ConnectivityIndex[i]-1+j-1] - In fortran mode : Connectivity[ConnectivityIndex[i]+j] */ Engines::long_array getConnectivityIndex(in medConnectivity mode, in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Get global number of element which have same connectivity than connectivity argument. */ long getElementNumber(in medConnectivity mode, in medEntityMesh entity, in medGeometryElement type, in Engines::long_array connectivity) raises (SALOME::SALOME_Exception); /*! Return a reverse connectivity to MED_CELL. If mode=MED_NODAL, the array contains, for each node, all cells arround it. If mode=MED_DESCENDING, the array contains, for each face (or edge), the 2 cells of each side. First is cell which face normal is outgoing. */ Engines::long_array getReverseConnectivity(in medConnectivity mode) raises (SALOME::SALOME_Exception); /*! Give index array to use with getReverseConnectivity(MED_NODAL). It is unusefull with MED_DESCENDING mode, because we have allways two cells. See getConnectivityIndex for details. */ Engines::long_array getReverseConnectivityIndex(in medConnectivity mode) raises (SALOME::SALOME_Exception); // Families and Groups // ------------------- /*! Returns the number of all families. */ long getNumberOfFamilies(in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Returns the number of all groups. */ long getNumberOfGroups(in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Returns an array of all families. */ Family_array getFamilies(in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Returns a reference to i-th to family. Note : i is bounded by 1 and NumberOfFamilies. */ FAMILY getFamily(in medEntityMesh entity,in long familyNumber) raises (SALOME::SALOME_Exception); /*! Returns an array of all groups. */ Group_array getGroups(in medEntityMesh entity) raises (SALOME::SALOME_Exception); /*! Returns a reference to i-th group. Note : i is bounded by 1 and NumberOfGroups. */ GROUP getGroup(in medEntityMesh entity,in long groupNumber) raises (SALOME::SALOME_Exception); // Others // ------ /*! Returns a field on mySupport containing volume. Note : mySupport must be on MED_CELL entity and MeshDimension must be 3. */ FIELD getVolume(in SUPPORT mySupport) raises (SALOME::SALOME_Exception); /*! Returns a field on mySupport containing area. Note : mySupport must be on MED_FACE entity. */ FIELD getArea(in SUPPORT mySupport) raises (SALOME::SALOME_Exception); /*! Returns a field on mySupport containing length. Note : mySupport must be on MED_EDGE entity. */ FIELD getLength(in SUPPORT mySupport) raises (SALOME::SALOME_Exception); /*! Returns a field on mySupport containing normal. Note : mySupport must be on MED_FACE entity if MeshDimension and SpaceDimension=3 and on MED_EDGE if MeshDimension and SpaceDimension=2. */ FIELD getNormal(in SUPPORT mySupport) raises (SALOME::SALOME_Exception); /*! Returns a field on mySupport containing barycenter. */ FIELD getBarycenter(in SUPPORT mySupport) raises (SALOME::SALOME_Exception); /* Returns a field on mySupport containing neighbourhood. */ // FIELD getNeighbourhood(in SUPPORT mySupport) // raises (SALOME::SALOME_Exception); // Read & Write // ----------- /*! Add the Mesh in the StudyManager. */ void addInStudy(in SALOMEDS::Study myStudy, in MESH myIor ) raises (SALOME::SALOME_Exception, SALOMEDS::StudyBuilder::LockProtection); // Add a MED/VTK/... driver // Multiple drivers can be added whatever the type long addDriver (in medDriverTypes driverType, in string fileName, in string meshName) raises (SALOME::SALOME_Exception); // Remove a driver void rmDriver (in long i) raises (SALOME::SALOME_Exception); // void read (in long i) raises (SALOME::SALOME_Exception); void write (in long i, in string driverMeshName) raises (SALOME::SALOME_Exception); // Cuisine Interne/Internal Kitchen long getCorbaIndex() raises (SALOME::SALOME_Exception); }; // ---------------------- // Support interface // ---------------------- interface SUPPORT { /*! Returns the name of the support. */ string getName() raises (SALOME::SALOME_Exception); /*! Returns the description of the support. */ string getDescription() raises (SALOME::SALOME_Exception); /*! Returns a reference to the mesh. */ MESH getMesh() raises (SALOME::SALOME_Exception); /*! Returns the medEntityMesh's type used by the support. Note : A support deals only with one entity's type (for example : MED_FACE or MED_NODE) */ medEntityMesh getEntity() raises (SALOME::SALOME_Exception); /*! Returns true if all elements of this entity are concerned, false otherwise. If true, you must use mesh reference (getMesh) to get more information. */ boolean isOnAllElements() raises (SALOME::SALOME_Exception); /*! If isOnAllElements is false, returns number of elements in the support. Example : number of MED_TRIA3 or MED_ALL_ELEMETNS elements in entity of support. Note : If SUPPORT is defined on MED_NODE, use MED_NONE medGeometryElement type. */ long getNumberOfElements(in medGeometryElement geomElement) raises (SALOME::SALOME_Exception); /*! If isOnAllElements is false, returns an array of types used by the support. is given by getEntity. */ medGeometryElement_array getTypes() raises (SALOME::SALOME_Exception); /*! If isOnAllElements is false, returns an array which contains all number of given medGeometryElement. Numbering is global, ie numbers are bounded by 1 and MESH::getNumberOfElement(entity,MED_ALL_ELEMENTS) and not by 1 and MESH::getNumberOfElement(entity,geomElement). Note : If SUPPORT is defined on MED_NODE, use MED_NONE medGeometryElement type. */ Engines::long_array getNumber(in medGeometryElement geomElement) raises (SALOME::SALOME_Exception); /*! If isOnAllElements is false, returns index of element number. Use it with getNumber(MED_ALL_ELEMENTS). Note : See getConnectivityIndex for details. */ Engines::long_array getNumberIndex() raises (SALOME::SALOME_Exception); /*! Returns number of Gauss points for this medGeometryElement. Note : - Not defined if SUPPORT is on MED_NODE. - Not defined for MED_ALL_ELEMENTS medGeometryElement type. */ long getNumberOfGaussPoints(in medGeometryElement geomElement) raises (SALOME::SALOME_Exception); // Cuisine Interne long getCorbaIndex() raises (SALOME::SALOME_Exception); }; //----------------- // Family interface //----------------- interface FAMILY : SUPPORT { /*! Returns Family identifier (Identifier of the family in the mesh). Note : There is precisely one for each family. */ long getIdentifier() raises (SALOME::SALOME_Exception); /*! Returns number of attributes. */ long getNumberOfAttributes() raises (SALOME::SALOME_Exception); /*! Returns an array of all attributes' identifiers. There is one for each attribute. */ Engines::long_array getAttributesIdentifiers() raises (SALOME::SALOME_Exception); /*! Returns identifier of i-th attribute. Note : i is bounded by 1 and NumberOfAttributes. */ long getAttributeIdentifier(in long i) raises (SALOME::SALOME_Exception); /*! Returns an array of all attributes values. There is one for each attribute. */ Engines::long_array getAttributesValues() raises (SALOME::SALOME_Exception); /*! Returns value of i-th attribute. Note : i is bounded by 1 and NumberOfAttributes. */ long getAttributeValue(in long i) raises (SALOME::SALOME_Exception); /*! Returns an array of all attributes descriptions. There is one for each attribute. */ Engines::string_array getAttributesDescriptions() raises (SALOME::SALOME_Exception); /*! Returns description of i-th attribute. Note : i is bounded by 1 and NumberOfAttributes. */ string getAttributeDescription(in long i) raises (SALOME::SALOME_Exception); }; //---------------- // Group interface //---------------- interface GROUP : SUPPORT { /*! Returns number of families in this group. */ long getNumberOfFamilies() raises (SALOME::SALOME_Exception); /*! Returns array of all families. */ Family_array getFamilies() raises (SALOME::SALOME_Exception); /*! Returns a reference for the i-th family. Note : i is bounded by 1 and NumberOfFamilies. */ FAMILY getFamily(in long i) raises (SALOME::SALOME_Exception); }; //---------------- // Field interface //---------------- interface FIELD { /*! Returns the field name. */ string getName() raises (SALOME::SALOME_Exception); /*! Returns the field description. */ string getDescription() raises (SALOME::SALOME_Exception); /*! Returns a reference to the support on which the field is defined. */ SUPPORT getSupport() raises (SALOME::SALOME_Exception); /*! Returns the number of field's components. */ long getNumberOfComponents() raises (SALOME::SALOME_Exception); /*! Returns an array containing components names. */ Engines::string_array getComponentsNames() raises (SALOME::SALOME_Exception); /*! Returns the name of i-th component. Note : - i is bounded by 1 and NumberOfComponents. - Name is mandatory foreach field's component. */ string getComponentName(in long i) raises (SALOME::SALOME_Exception); /*! Returns an array containing components units. */ Engines::string_array getComponentsUnits() raises (SALOME::SALOME_Exception); /*! Returns the unit of i-th component. Note : i is bounded by 1 and NumberOfComponents. */ string getComponentUnit(in long i) raises (SALOME::SALOME_Exception); long getIterationNumber() raises (SALOME::SALOME_Exception); /*! Returns time for this iteration. */ double getTime() raises (SALOME::SALOME_Exception); /*! Returns order number use for internal step in this iteration. */ long getOrderNumber() raises (SALOME::SALOME_Exception); // Read & Write // ----------- long addDriver (in medDriverTypes driverType, in string fileName, in string fieldName) raises (SALOME::SALOME_Exception); // Remove a driver void rmDriver (in long i) raises (SALOME::SALOME_Exception); // void read (in long i) raises (SALOME::SALOME_Exception); /*! Write field. */ void write (in long i, in string driverFieldName) raises (SALOME::SALOME_Exception); /*! Add the Field in the StudyManager. */ void addInStudy(in SALOMEDS::Study myStudy, in FIELD myIor ) raises (SALOME::SALOME_Exception, SALOMEDS::StudyBuilder::LockProtection); // Cuisine Interne long getCorbaIndex() raises (SALOME::SALOME_Exception); }; interface FIELDDOUBLE : FIELD { /*! Returns the field values array */ Engines::double_array getValue(in medModeSwitch mode) raises (SALOME::SALOME_Exception); }; interface FIELDINT : FIELD { /*! Returns the field values array */ Engines::long_array getValue(in medModeSwitch mode) raises (SALOME::SALOME_Exception); }; // MED interface interface MED { long getNumberOfMeshes () raises (SALOME::SALOME_Exception); long getNumberOfFields () raises (SALOME::SALOME_Exception); Engines::string_array getMeshNames () raises (SALOME::SALOME_Exception); Engines::string_array getFieldNames () raises (SALOME::SALOME_Exception); MESH getMeshByName ( in string meshName) raises (SALOME::SALOME_Exception); MESH getMesh ( in FIELD fieldPtr) raises (SALOME::SALOME_Exception); FIELD getField ( in string fieldName, in long pasTemps, in long numOrdre ) raises (SALOME::SALOME_Exception); // Add a MED/VTK/... driver to a MED'GEN' object to // be able to read/write files preserving meshes<-->fields association // Multiple drivers can be added whatever the type. // The access point in the returned long addDriver (in medDriverTypes driverType, in string fileName) raises (SALOME::SALOME_Exception); // Remove the driver void rmDriver (in long i) raises (SALOME::SALOME_Exception); void readFileStruct(in long i) raises (SALOME::SALOME_Exception); void writeFrom (in long i) raises (SALOME::SALOME_Exception); void write (in long i) raises (SALOME::SALOME_Exception); void addMesh (in MESH ptrMesh ) raises (SALOME::SALOME_Exception); void addField (in FIELD ptrField ) raises (SALOME::SALOME_Exception); void addInStudy (in SALOMEDS::Study myStudy, in MED medPtr) raises (SALOME::SALOME_Exception, SALOMEDS::StudyBuilder::LockProtection); }; }; #endif /* MED_IDL */