Salome HOME
Mantis issue 0021668: [CEA 564] MED2.1 to MED2.3
[modules/med.git] / src / MEDWrapper / V2_1 / Core / MEDnomLire.cxx
1 /*************************************************************************
2 * COPYRIGHT (C) 1999 - 2002  EDF R&D
3 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
4 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
5 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
6 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
7 *  
8 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
9 * 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 LICENSE
14 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
15 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
16 *
17 *************************************************************************/
18
19 #include "med.hxx"
20 #include "med_outils.hxx"
21
22 #include <stdlib.h>
23 #include <string.h>
24
25 namespace med_2_1{
26
27 med_err
28 MEDnomLire(med_idt fid,char *maa, char *nom, med_int n, 
29            med_entite_maillage type_ent,med_geometrie_element type_geo)
30 {
31   med_idt root, maaid, entid, geoid;
32   med_err ret;
33   char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
34   char nom_ent[MED_TAILLE_NOM_ENTITE+1];
35   char nom_geo[MED_TAILLE_NOM_ENTITE+1];
36
37   /*
38    * On inhibe le gestionnaire d'erreur HDF 5
39    */
40   _MEDmodeErreurVerrouiller();
41
42   /*
43    * Si le maillage n'existe pas => erreur
44    */
45   strcpy(chemin,MED_MAA);
46   strcat(chemin,maa);
47   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
48       return -1;
49
50   /*
51    * On met a jour le nom du Data Group representant
52    * le type des entites
53    */
54    if ((ret = _MEDnomEntite(nom_ent,type_ent)) < 0)
55      return -1;
56
57    /*
58     * Si le Data Group des entites n'existe pas => erreur
59     */
60    if ((entid = _MEDdatagroupOuvrir(maaid,nom_ent)) < 0)
61      return -1;
62
63    /*
64     * Pour les mailles, les faces et le aretes,
65     * on ouvre le Data Group du type geometrique
66     */
67    if ((type_ent==MED_MAILLE)||(type_ent==MED_FACE)||(type_ent==MED_ARETE))
68      {
69        if ((ret = _MEDnomGeometrie(nom_geo,type_geo)) < 0)
70          return -1;
71        if ((geoid = _MEDdatagroupOuvrir(entid,nom_geo)) < 0)
72            return -1;
73      }
74    else
75      geoid = -1;
76
77    /*
78     * lecture du Data Set "NOM" 
79     */
80    if (geoid == -1)
81      root = entid;
82    else
83      root = geoid;
84    if ((ret = _MEDdatasetStringLire(root,MED_NOM_NOM,nom)) < 0)
85      return -1;
86
87    /*
88     * On ferme tout
89     */
90    if (geoid > 0)
91      if ((ret = _MEDdatagroupFermer(geoid)) < 0)
92        return -1;
93    if ((ret = _MEDdatagroupFermer(entid)) < 0)
94      return -1;
95    if ((ret = _MEDdatagroupFermer(maaid)) < 0)
96      return -1;
97
98   return 0; 
99 }
100
101 }