Back to index

salome-med  6.5.0
MEDnEntMaa.cxx
Go to the documentation of this file.
00001 /*************************************************************************
00002 * COPYRIGHT (C) 1999 - 2002  EDF R&D
00003 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
00004 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
00005 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
00006 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
00007 *  
00008 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
00009 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
00010 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
00011 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
00012 *
00013 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
00014 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
00015 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
00016 *
00017 *************************************************************************/
00018 
00019 #include "med.hxx"
00020 #include "med_outils.hxx"
00021 
00022 #include <string.h>
00023 #include <stdlib.h>
00024 
00025 namespace med_2_1{
00026 
00027 med_int
00028 MEDnEntMaa(med_idt fid, char *maa, med_table quoi, med_entite_maillage type_ent, 
00029            med_geometrie_element type_geo, med_connectivite type_conn)
00030 {
00031   med_idt root, maaid, entid,geoid, dataset=0;
00032   med_err ret;
00033   char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
00034   char nom_ent[MED_TAILLE_NOM_ENTITE+1];
00035   char nom_geo[MED_TAILLE_NOM_ENTITE+1];
00036   char nom_dataset[MED_TAILLE_NOM_ENTITE+1];
00037   med_int res = 0;
00038 
00039   /*
00040    * On inhibe le gestionnaire d'erreur HDF 5
00041    */
00042   _MEDmodeErreurVerrouiller();
00043 
00044   /*
00045    * Si le maillage n'existe pas => erreur
00046    */
00047   strcpy(chemin,MED_MAA);
00048   strcat(chemin,maa);
00049   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00050     return -1;
00051 
00052   /*
00053    * On met a jour le nom du Data Group representant
00054    * le type des entites
00055    */
00056   if ((ret = _MEDnomEntite(nom_ent,type_ent)) < 0)
00057     return -1;
00058 
00059    /*
00060     * Si le Data Group des entites n'existe pas => res = 0
00061     */
00062   entid = _MEDdatagroupOuvrir(maaid,nom_ent);
00063 
00064    /*
00065     * Pour les mailles, les faces et le aretes
00066     * si le Data Group du type geometrique n'existe pas => res = 0
00067     */
00068   if ((type_ent==MED_MAILLE)||(type_ent==MED_FACE)||(type_ent==MED_ARETE))
00069     {
00070       if ((ret = _MEDnomGeometrie(nom_geo,type_geo)) < 0)
00071         return -1;
00072       geoid = _MEDdatagroupOuvrir(entid,nom_geo);
00073     }
00074   else
00075     geoid = -1;
00076   
00077    /*
00078     * Ouverture du Data Set renvoye par _MEDnomDataset()
00079     * S'il n'existe pas => erreur
00080     * Sinon lecture de l'attribut NBR
00081     */
00082    if (geoid == -1)
00083      root = entid;
00084    else
00085      root = geoid;
00086    if ((ret = _MEDnomDataset(nom_dataset,quoi,type_conn)) < 0)
00087      return -1;
00088    dataset = _MEDdatasetOuvrir(root,nom_dataset);
00089    if (dataset > 0)
00090      if ((ret = _MEDattrEntierLire(dataset,MED_NOM_NBR,&res)) < 0)
00091        return -1;
00092 
00093    /*
00094     * On ferme tout
00095     */
00096    if (dataset > 0)
00097      if ((ret = _MEDdatasetFermer(dataset)) < 0)
00098        return -1;
00099    if (geoid > 0)
00100      if ((ret = _MEDdatagroupFermer(geoid)) < 0)
00101        return -1;
00102    if (entid > 0)
00103      if ((ret = _MEDdatagroupFermer(entid)) < 0)
00104        return -1;
00105    if ((ret = _MEDdatagroupFermer(maaid)) < 0)
00106      return -1; 
00107 
00108   return res;
00109 }
00110      
00111 }