Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/med.git] / src / MEDWrapper / V2_1 / Core / MEDfamLire.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 MEDfamLire(med_idt fid,char *maa, med_int *fam, 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, on cree
65     * si le Data Group du type geometrique => erreur
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 "FAM" 
79     */
80    if (geoid == -1)
81      root = entid;
82    else
83      root = geoid;
84 #if defined(HAVE_F77INT64)
85    if ((ret = _MEDdatasetNumLire(root,MED_NOM_FAM,MED_INT64,
86                                  MED_NO_INTERLACE,1,MED_ALL,
87                                  MED_NOPF,0,MED_NOPG,
88                                  (unsigned char *)fam)) < 0)
89      return -1;
90 #else
91    if ((ret = _MEDdatasetNumLire(root,MED_NOM_FAM,MED_INT32,
92                                  MED_NO_INTERLACE,1,MED_ALL,
93                                  MED_NOPF,0,MED_NOPG,
94                                  (unsigned char *)fam)) < 0)
95      return -1;
96 #endif
97
98    /*
99     * On ferme tout
100     */
101    if (geoid != -1)
102      if ((ret = _MEDdatagroupFermer(geoid)) < 0)
103        return -1;
104    if ((ret = _MEDdatagroupFermer(entid)) < 0)
105      return -1;
106    if ((ret = _MEDdatagroupFermer(maaid)) < 0)
107      return -1; 
108
109   return 0; 
110 }
111
112 }