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 /******************************************************************************
21 * - Nom du fichier : test24.c
22 *
23 * - Description : lecture de mailles/faces de type MED_POLYGONE
24 * dans le maillage MED du fichier test23.med
25 *
26 *****************************************************************************/
27
28 #include <med.h>
29 #define MESGERR
30 #include <med_utils.h>
31
32 #ifdef DEF_LECT_ECR
33 #define MODE_ACCES MED_LECTURE_ECRITURE
34 #elif DEF_LECT_AJOUT
35 #define MODE_ACCES MED_LECTURE_AJOUT
36 #else
37 #define MODE_ACCES MED_CREATION
38 #endif
39
40 int main (int argc, char **argv)
41
42
43 {
44 med_err ret = 0;
45 med_idt fid;
46 char maa[MED_TAILLE_NOM+1];
47 med_int nmaa,i,mdim,npoly,j;
48 char desc[MED_TAILLE_DESC+1];
49 med_int taille;
50 med_int *con, *index, *num, *fam;
51 char *nom;
52 char tmp[MED_TAILLE_PNOM+1];
53 int ind1, ind2,k;
54 med_maillage type;
55
56 /* Ouverture du fichier test23.med en lecture seule */
57 fid = MEDouvrir("test23.med",MED_LECTURE);
58 if (fid < 0) {
59 MESSAGE("Erreur a l'ouverture du fichier test23.med");
60 return -1;
61 }
62 printf("Ouverture du fichier test23.med \n");
63
64 /* Lecture du nombre de maillages */
65 nmaa = MEDnMaa(fid);
66 if (nmaa < 0) {
67 MESSAGE("Erreur a la lecture du nombre de maillage");
68 return -1;
69 }
70 printf("Nombre de maillages = %d\n",nmaa);
71
72 for (i=0;i<nmaa;i++) {
73
74 /* Infos sur le maillage */
75 if (MEDmaaInfo(fid,i+1,maa,&mdim,&type,desc) < 0) {
76 MESSAGE("Erreur a la lecture des infos sur le maillage");
77 return -1;
78 }
79 printf("maillage %d de nom [%s] et de dimension : %d \n",i+1,maa,mdim);
80
81 /* Combien de mailles polygones en mode nodal */
82 if ((npoly = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_POLYGONE,MED_NOD)) < 0) {
83 MESSAGE("Erreur a la lecture du nombre de mailles MED_POLYGONE");
84 return -1;
85 }
86 printf("Nombre de mailles polygones en mode nodal : %d \n",npoly);
87
88 /* Quelle taille pour le tableau des connectivites */
89 if (MEDpolygoneInfo(fid,maa,MED_MAILLE,MED_NOD,&taille) < 0) {
90 MESSAGE("Erreur a la lecture des infos sur les maillaes MED_POLYGONE");
91 return -1;
92 }
93 printf("Taille a allouer pour la connectivite des polygones : %d \n",taille);
94
95 /* Allocation memoire :
96 * - tableau d'index : npoly + 1
97 * - tableau des connectivites : taille
98 * - tableaux numeros et numeros de familles : npoly
99 * - tableau des noms : MED_TAILLE_PNOM*npoly + 1
100 */
101 index = (med_int *) malloc(sizeof(med_int)*(npoly+1));
102 con = (med_int *) malloc(sizeof(med_int)*taille);
103 num = (med_int *) malloc(sizeof(med_int)*npoly);
104 fam = (med_int *) malloc(sizeof(med_int)*npoly);
105 nom = (char *) malloc(sizeof(char)*MED_TAILLE_PNOM*npoly+1);
106
107 /* Lecture de la connectivite des mailles polygones */
108 if (MEDpolygoneConnLire(fid,maa,index,npoly+1,con,MED_MAILLE,MED_NOD) < 0) {
109 MESSAGE("Erreur a la lecture de la connectivite des mailles MED_POLYGONE");
110 ret = -1;
111 }
112 printf("Lecture de la connectivite des mailles MED_POLYGONE en mode nodal \n");
113
114 /* Lecture noms */
115 if (ret == 0) {
116 if (MEDnomLire(fid,maa,nom,npoly,MED_MAILLE,MED_POLYGONE) < 0) {
117 MESSAGE("Erreur a la lecture des noms des mailles MED_POLYGONE");
118 ret = -1;
119 }
120 printf("Lecture des noms des mailles MED_POLYGONE \n");
121 }
122
123 /* Lecture des numeros */
124 if (ret == 0) {
125 if (MEDnumLire(fid,maa,num,npoly,MED_MAILLE,MED_POLYGONE) < 0) {
126 MESSAGE("Erreur a la lecture des numeros des mailles MED_POLYGONE");
127 ret = -1;
128 }
129 printf("Lecture des numeros des mailles MED_POLYGONE \n");
130 }
131
132 /* lecture des numeros de familles */
133 if (ret == 0) {
134 if (ret = MEDfamLire(fid,maa,fam,npoly,MED_MAILLE,MED_POLYGONE) < 0) {
135 MESSAGE("Erreur a la lecture des numeros de famille des mailles MED_POLYGONE");
136 ret = -1;
137 }
138 printf("Lecture des numeros de familles des mailles MED_POLYGONE \n");
139 }
140
141 if (ret == 0) {
142 printf("Affichage des resultats \n");
143 for (j=0;j<npoly;j++) {
144 printf(">> Maille MED_POLYGONE %d : \n",j+1);
145 printf("---- Connectivite ----- : [ ");
146 ind1 = *(index+j)-1;
147 ind2 = *(index+j+1)-1;
148 for (k=ind1;k<ind2;k++)
149 printf("%d ",*(con+k));
150 printf(" ] \n");
151 strncpy(tmp,nom+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
152 tmp[MED_TAILLE_PNOM] = '\0';
153 printf("---- Nom ----- : %s \n",tmp);
154 printf("---- Numero ----- : %d \n",*(num+j));
155 printf("---- Numero de famille ----- : %d \n",*(fam+j));
156 }
157 }
158
159 /* Liberation de la memoire */
160 free(index);
161 free(con);
162 free(num);
163 free(fam);
164 free(nom);
165 }
166
167 /* Fermeture du fichier */
168 if (MEDfermer(fid) < 0) {
169 MESSAGE("Erreur a la fermeture du fichier");
170 return -1;
171 }
172 printf("Fermeture du fichier \n");
173
174 return ret;
175 }