Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/med.git] / src / MEDWrapper / V2_1 / Core / MEDnGrid.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 <cstring>
23
24 namespace med_2_1{
25
26 med_int 
27 MEDnGrid(med_idt fid, char *maa, med_grid n) 
28 {
29     med_idt maaid, entid, geoid, dataset;
30     char    chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
31     char    nom_ent[MED_TAILLE_NOM_ENTITE+1];
32     char    *nom_dataset;
33     med_int  res = (-1);
34
35     /* On inhibe le gestionnaire d'erreur HDF 5 */
36     _MEDmodeErreurVerrouiller();
37
38     /* Si le maillage n'existe pas => erreur */
39     strcpy(chemin, MED_MAA);
40     strcat(chemin, maa);
41     maaid = _MEDdatagroupOuvrir(fid, chemin);
42     if (maaid < 0) return(-1);
43
44     switch (n) {
45         case MED_FAM_NOEUD : {
46             nom_dataset = MED_NOM_FAM;
47             if (_MEDnomEntite(nom_ent, MED_NOEUD) < 0) return(-1);
48             entid = _MEDdatagroupOuvrir(maaid, nom_ent);
49             break;
50         };
51         case MED_FAM_ARETE : {
52             nom_dataset = MED_NOM_FAM;
53             if (_MEDnomEntite(nom_ent, MED_ARETE) < 0) return(-1);
54             geoid = _MEDdatagroupOuvrir(maaid, nom_ent);
55             if (geoid < 0) return(-1);
56             if (_MEDnomGeometrie(nom_ent, MED_SEG2) < 0) return(-1);
57             entid = _MEDdatagroupOuvrir(geoid, nom_ent);
58             break;
59         };
60         case MED_FAM_FACE : {
61             nom_dataset = MED_NOM_FAM;
62             if (_MEDnomEntite(nom_ent, MED_FACE) < 0) return(-1);
63             geoid = _MEDdatagroupOuvrir(maaid, nom_ent);
64             if (geoid < 0) return(-1);
65             if (_MEDnomGeometrie(nom_ent, MED_QUAD4) < 0) return(-1);
66             entid = _MEDdatagroupOuvrir(geoid, nom_ent);
67             break;
68         };
69         case MED_FAM_MAILLE : {
70             nom_dataset = MED_NOM_FAM;
71             if (_MEDnomEntite(nom_ent, MED_MAILLE) < 0) return(-1);
72             geoid = _MEDdatagroupOuvrir(maaid, nom_ent);
73             if (geoid < 0) return(-1);
74             if (_MEDnomGeometrie(nom_ent, MED_HEXA8) < 0) return(-1);
75             entid = _MEDdatagroupOuvrir(geoid, nom_ent);
76             break;
77         };
78         case MED_GRID_NOEUD : {
79             nom_dataset = MED_NOM_BOF;
80             entid = _MEDdatagroupOuvrir(maaid, MED_NOM_NOE);
81             break;
82         };
83         case MED_GRID_D1 : {
84             nom_dataset = MED_NOM_IN1;
85             entid = _MEDdatagroupOuvrir(maaid, MED_NOM_NOE);
86             break;
87         };
88         case MED_GRID_D2 : {
89             nom_dataset = MED_NOM_IN2;
90             entid = _MEDdatagroupOuvrir(maaid, MED_NOM_NOE);
91             break;
92         };
93         case MED_GRID_D3 : {
94             nom_dataset = MED_NOM_IN3;
95             entid = _MEDdatagroupOuvrir(maaid, MED_NOM_NOE);
96             break;
97         };
98         default : {
99             return(-1);
100         };
101     };
102
103     if (entid < 0) return(-1);
104     dataset = _MEDdatasetOuvrir(entid, nom_dataset);
105     if (dataset < 0) return(-1);
106     if (_MEDattrEntierLire(dataset, MED_NOM_NBR, &res) < 0) return(-1);
107
108     /* On ferme tout */
109     if (_MEDdatasetFermer(dataset) < 0) return(-1);
110     if (_MEDdatagroupFermer(entid) < 0) return(-1);
111     if (_MEDdatagroupFermer(maaid) < 0) return(-1);
112
113     return(res);
114 }
115
116 }