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