1 /*************************************************************************
2 * COPYRIGHT (C) 1999 - 2007 EDF R&D, CEA/DEN
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 /******************************************************************************
20 * - Nom du fichier : test28.c
21 *
22 * - Description : lecture d'un maillage structure (grille cartesienne |
23 * grille polaire) dans le fichier test27.med
24 *
25 *****************************************************************************/
26
27 #include <med.h>
28 #define MESGERR
29 #include <med_utils.h>
30
31 #ifdef DEF_LECT_ECR
32 #define MODE_ACCES MED_LECTURE_ECRITURE
33 #elif DEF_LECT_AJOUT
34 #define MODE_ACCES MED_LECTURE_AJOUT
35 #else
36 #define MODE_ACCES MED_CREATION
37 #endif
38
39 int main (int argc, char **argv)
40
41
42 {
43 int i;
44 med_err ret = 0;
45 med_idt fid;
46 /* la dimension du maillage */
47 med_int mdim,axe,j;
48 med_float *indices;
49 med_int nind,nmaa;
50 /* nom du maillage de longueur maxi MED_TAILLE_NOM */
51 char maa[MED_TAILLE_NOM+1];
52 /* composantes et unites */
53 char comp[MED_TAILLE_PNOM+1];
54 char unit[MED_TAILLE_PNOM+1];
55 char desc[MED_TAILLE_DESC+1];
56 med_maillage type_maillage;
57 med_type_grille type;
58 med_table quoi;
59 med_int nnoeuds;
60 char *comp2, *unit2;
61 med_float *coo;
62 med_int *structure_grille;
63 med_repere repere;
64
65 /* Ouverture du fichier test17.med en lecture seule */
66 fid = MEDouvrir("test27.med",MED_LECTURE);
67 if (fid < 0) {
68 MESSAGE("Erreur a l'ouverture du fichier test27.med");
69 return -1;
70 }
71
72 /* Lecture du nombre de maillage */
73 nmaa = MEDnMaa(fid);
74 if (nmaa < 0) {
75 MESSAGE("Erreur a la lecture du nombre de maillage");
76 return -1;
77 }
78
79 /* On boucle sur les maillages et on ne lit que la grille cartesienne
80 et la grille desturcutree */
81 for (i=0;i<nmaa;i++) {
82
83 /* On repere le maillage qui nous interesse */
84 if (MEDmaaInfo(fid,i+1,maa,&mdim,&type_maillage,desc) < 0) {
85 MESSAGE("Erreur a la lecture des infos sur le maillage");
86 return -1;
87 }
88 printf("Maillage de nom [%s] de dimension %d \n",maa,mdim);
89 if (type_maillage == MED_STRUCTURE)
90 printf("- Type : Maillage structure \n");
91 else
92 printf("- Type : Maillage non structure \n");
93
94 /* On regarde le type de la grille */
95 if (type_maillage == MED_STRUCTURE) {
96 if (MEDnatureGrilleLire(fid,maa,&type) < 0) {
97 MESSAGE("Erreur a la lecture de la nature d'une grille");
98 return -1;
99 }
100 if (type == MED_GRILLE_CARTESIENNE)
101 printf("- Grille cartesienne \n");
102 if (type == MED_GRILLE_STANDARD)
103 printf("- Grille de-structureee \n");
104 }
105
106 /* On regarde les coordonnees de la grille standard */
107 if (type_maillage == MED_STRUCTURE && type == MED_GRILLE_STANDARD) {
108
109 nnoeuds = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0);
110 if (nnoeuds < 0) {
111 MESSAGE("Erreur a la lecture du nombre de noeuds");
112 return -1;
113 }
114 printf("Nombre de noeuds : %d \n",nnoeuds);
115
116 structure_grille = (med_int *) malloc(sizeof(med_int)*mdim);
117 if (MEDstructureCoordLire(fid,maa,mdim,structure_grille) < 0) {
118 MESSAGE("Erreur a la lecture de la structure de la grille");
119 ret = -1;
120 }
121 if (ret == 0) {
122 printf("Structure des noeuds de la grille : [ ");
123 for (j=0;j<mdim;j++)
124 printf(" %d ",*(structure_grille+j));
125 printf(" ] \n");
126 free(structure_grille);
127 }
128
129 if (ret == 0) {
130 coo = (med_float *) malloc(sizeof(med_float)*nnoeuds*mdim);
131 comp2 = (char *) malloc(sizeof(char)*(mdim*MED_TAILLE_PNOM+1));
132 unit2 = (char *) malloc(sizeof(char)*(mdim*MED_TAILLE_PNOM+1));
133
134 if (ret = MEDcoordLire(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_ALL,NULL,0,
135 &repere,comp2,unit2) < 0) {
136 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
137 ret = -1;
138 }
139 }
140
141 if (ret == 0) {
142 printf("Coordonnees : [ ");
143 for (j=0;j<nnoeuds*mdim;j++)
144 printf(" %f ",*(coo+j));
145 printf(" ] \n");
146 free(coo);
147 free(comp2);
148 free(unit2);
149 }
150 }
151
152 /* On regarde les coordonnees des indices de la grille cartesienne */
153 if (type_maillage == MED_STRUCTURE && type == MED_GRILLE_CARTESIENNE)
154 for(axe=1;axe<=mdim;axe++) {
155 switch(axe) {
156 case 1 :
157 quoi = MED_COOR_IND1;
158 break;
159
160 case 2 :
161 quoi = MED_COOR_IND2;
162 break;
163
164 case 3 :
165 quoi = MED_COOR_IND3;
166 break;
167
168 default :
169 return -1;
170 }
171
172 nind = MEDnEntMaa(fid,maa,quoi,MED_NOEUD,0,0);
173 if (nind < 0) {
174 MESSAGE("Erreur a la lecture de la taille de l'indice");
175 return -1;
176 }
177 printf("Lecture de la taille de l'indice : %d \n",nind);
178
179 /* on lit le tableau des indices */
180 indices = (med_float *) malloc(sizeof(med_float)*nind);
181 if (MEDindicesCoordLire(fid,maa,mdim,indices,nind,axe,comp,unit) < 0) {
182 MESSAGE("Erreur a lecture de indices de coordonnees");
183 ret = -1;
184 }
185 if (ret == 0) {
186 printf("Axe %s [%s] : [ ",comp,unit);
187 for (j=0;j<nind;j++)
188 printf(" %f ",indices[j]);
189 printf(" ] \n");
190 free(indices);
191 }
192 }
193 }
194
195 /* On ferme le fichier */
196 if (MEDfermer(fid) < 0) {
197 MESSAGE("Erreur a la fermeture du fichier");
198 return -1;
199 }
200 printf("Fermeture du fichier \n");
201
202 return ret;
203 }