Salome HOME
Mantis issue 0021668: [CEA 564] MED2.1 to MED2.3
[modules/med.git] / src / MEDWrapper / V2_1 / Core / MEDcoordLire.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_outils.hxx"
20 #include "med.hxx"
21
22 #include <string.h>
23 #include <stdlib.h>
24
25 extern int mode_interlace;
26
27 namespace med_2_1{
28
29 med_err 
30 MEDcoordLire(med_idt fid, char *maa, med_int mdim, med_float *coo,
31              med_mode_switch mode_coo,med_int numco,
32              med_int * pfltabtmp, med_size psize, med_repere *type_rep, char *nom, char *unit)
33 {
34   med_idt   maaid, noeid, dataset;
35   med_err   ret;
36   char      chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
37   int       i;
38   med_int   type_rep_int;
39   med_ssize * pfltab = NULL;
40
41   /*
42    * On inhibe le gestionnaire d'erreur
43    */
44   _MEDmodeErreurVerrouiller();
45
46   /*
47    * Si le maillage n'existe pas => erreur
48    * Sinon on recupere sa dimension au passage
49    */
50   strcpy(chemin,MED_MAA);
51   strcat(chemin,maa);
52   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
53       return -1;
54
55   /*
56    * Si le Data Group "NOE" n'existe pas => erreur
57    */
58   if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0)
59       return -1;
60
61   /*
62    * Convertion de med_int en med_ssize
63    */
64   if ( psize != MED_NOPF ) {  
65     pfltab = (med_ssize *) malloc (sizeof(med_ssize)*(size_t)psize);
66     for (i=0;i<psize;i++)
67       pfltab[i] = (med_ssize) pfltabtmp[i];
68   }
69
70   /*
71    * Lecture du Data Set "COO"
72    */
73   if ((ret = _MEDdatasetNumLire(noeid,MED_NOM_COO,MED_REEL64,
74                                 mode_coo,mdim,numco,
75                                 psize,pfltab,MED_NOPG,
76                                 (unsigned char*) coo)) < 0)
77     return -1;
78
79   
80
81   /*
82    * On re-ouvre le Data Set "COO" pour y lire des attributs
83    */
84   if ((dataset = _MEDdatasetOuvrir(noeid,MED_NOM_COO)) < 0)
85     return -1;
86
87   /*
88    * L'attribut "REP"
89    */
90   if ((ret = _MEDattrEntierLire(dataset,MED_NOM_REP,&type_rep_int)) < 0)
91     return -1;
92   else
93     *type_rep = (med_repere) type_rep_int;
94
95   /*
96    * Attribut "NOM"
97    */
98   if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,mdim*MED_TAILLE_PNOM,
99                                 nom)) < 0)
100     return -1;
101
102   /*
103    * Attribut "UNI"
104    */
105   if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,mdim*MED_TAILLE_PNOM,
106                                 unit)) < 0)
107     return -1;
108
109   /*
110    * On ferme tout
111    */
112   if ( psize != MED_NOPF ) free(pfltab); 
113   
114   if ((ret = _MEDdatasetFermer(dataset)) < 0)
115     return -1;
116   if ((ret = _MEDdatagroupFermer(noeid)) < 0)
117     return -1;
118   if ((ret = _MEDdatagroupFermer(maaid)) < 0)
119     return -1;
120
121   return 0; 
122 }
123
124 }