Salome HOME
70be872c9f5b90e1cb8cb6fb3d82b079b19b8287
[modules/med.git] / src / MEDWrapper / V2_1 / MEDcoordLire.cxx
1 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 // 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either 
7 // version 2.1 of the License.
8 // 
9 // This library is distributed in the hope that it will be useful 
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public  
15 // License along with this library; if not, write to the Free Software 
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/
19 //
20 /*************************************************************************
21 * COPYRIGHT (C) 1999 - 2002  EDF R&D
22 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
23 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
24 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
25 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
26 *  
27 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
28 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
29 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
30 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
31 *
32 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
33 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
34 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
35 *
36 *************************************************************************/
37
38 #include "med_outils.hxx"
39 #include "med.hxx"
40
41 #include <string.h>
42 #include <stdlib.h>
43
44 extern int mode_interlace;
45
46 namespace med_2_1{
47
48 med_err 
49 MEDcoordLire(med_idt fid, char *maa, med_int mdim, med_float *coo,
50              med_mode_switch mode_coo,med_int numco,
51              med_int * pfltabtmp, med_size psize, med_repere *type_rep, char *nom, char *unit)
52 {
53   med_idt   maaid, noeid, dataset;
54   med_err   ret;
55   char      chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
56   int       i,j;
57   med_float *new_coo;
58   med_int   type_rep_int;
59   med_ssize * pfltab;
60
61   /*
62    * On inhibe le gestionnaire d'erreur
63    */
64   _MEDmodeErreurVerrouiller();
65
66   /*
67    * Si le maillage n'existe pas => erreur
68    * Sinon on recupere sa dimension au passage
69    */
70   strcpy(chemin,MED_MAA);
71   strcat(chemin,maa);
72   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
73       return -1;
74
75   /*
76    * Si le Data Group "NOE" n'existe pas => erreur
77    */
78   if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0)
79       return -1;
80
81   /*
82    * Convertion de med_int en med_ssize
83    */
84   if ( psize != MED_NOPF ) {  
85     pfltab = (med_ssize *) malloc (sizeof(med_ssize)*psize);
86     for (i=0;i<psize;i++)
87       pfltab[i] = (med_ssize) pfltabtmp[i];
88   }
89
90   /*
91    * Lecture du Data Set "COO"
92    */
93   if ((ret = _MEDdatasetNumLire(noeid,MED_NOM_COO,MED_REEL64,
94                                 mode_coo,mdim,numco,
95                                 psize,pfltab,MED_NOPG,
96                                 (unsigned char*) coo)) < 0)
97     return -1;
98
99   
100
101   /*
102    * On re-ouvre le Data Set "COO" pour y lire des attributs
103    */
104   if ((dataset = _MEDdatasetOuvrir(noeid,MED_NOM_COO)) < 0)
105     return -1;
106
107   /*
108    * L'attribut "REP"
109    */
110   if ((ret = _MEDattrEntierLire(dataset,MED_NOM_REP,&type_rep_int)) < 0)
111     return -1;
112   else
113     *type_rep = (med_repere) type_rep_int;
114
115   /*
116    * Attribut "NOM"
117    */
118   if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,mdim*MED_TAILLE_PNOM,
119                                 nom)) < 0)
120     return -1;
121
122   /*
123    * Attribut "UNI"
124    */
125   if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,mdim*MED_TAILLE_PNOM,
126                                 unit)) < 0)
127     return -1;
128
129   /*
130    * On ferme tout
131    */
132   if ( psize != MED_NOPF ) free(pfltab); 
133   
134   if ((ret = _MEDdatasetFermer(dataset)) < 0)
135     return -1;
136   if ((ret = _MEDdatagroupFermer(noeid)) < 0)
137     return -1;
138   if ((ret = _MEDdatagroupFermer(maaid)) < 0)
139     return -1;
140
141   return 0; 
142 }
143
144 }