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 * - Nom du fichier : test13.c
21 *
22 * - Description : lecture des equivalences d'un maillage MED.
23 *
24 *****************************************************************************/
25
26 #include <med.h>
27 #include <med_utils.h>
28 #include <stdio.h>
29 #include <string.h>
30 #include <stdlib.h>
31
32 /* On prend en compte tous les types de mailles concernees
33 par les equivalences */
34 #define MED_NBR_MAILLE_EQU 8
35
36 int main (int argc, char **argv)
37 {
38 med_err ret = 0;
39 med_idt fid;
40 char maa[MED_TAILLE_NOM+1];
41 med_int mdim;
42 med_int nequ,ncor;
43 med_int *cor;
44 char equ[MED_TAILLE_NOM+1];
45 char des[MED_TAILLE_DESC+1];
46 med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE+1] = {MED_POINT1,MED_SEG2,
47 MED_SEG3,MED_TRIA3,
48 MED_TRIA6,MED_QUAD4,
49 MED_QUAD8,MED_POLYGONE};
50 med_geometrie_element typfac[MED_NBR_GEOMETRIE_FACE+1] = {MED_TRIA3,MED_TRIA6,
51 MED_QUAD4,MED_QUAD8,
52 MED_POLYGONE};
53 med_geometrie_element typare[MED_NBR_GEOMETRIE_ARETE] = {MED_SEG2,MED_SEG3};
54 int i,j,k;
55 med_maillage type;
56
57 if (argc != 2) {
58 MESSAGE("Il faut passer un fichier MED en paramètre");
59 return -1;
60 }
61
62 /* Ouverture du fichier passe en argument en lecture seule */
63 if ((fid = MEDouvrir(argv[1],MED_LECTURE)) < 0) {
64 MESSAGE("Erreur a l'ouverture du fichier : "); SSCRUTE(argv[1]);
65 return -1;
66 }
67
68 /* Lecture des infos sur le premier maillage */
69 if (MEDmaaInfo(fid,1,maa,&mdim,&type,des) < 0) {
70 MESSAGE("Erreur a lecture des infos sur le 1er maillage");
71 return -1;
72 }
73 printf("Maillage de nom %s et de dimension %d \n",maa,mdim);
74
75 /* Lecture du nombre d'equivalence */
76 if ((nequ = MEDnEquiv(fid,maa)) < 0) {
77 MESSAGE("Erreur a la lecture du nombre d'equivalence");
78 return -1;
79 }
80 printf("Nombre d'equivalences : %d \n",nequ);
81
82 /* Lecture de toutes les equivalences du maillage */
83 if (nequ > 0)
84 for (i = 0;i<nequ;i++) {
85 printf("Equivalence numero : %d \n",i+1);
86
87 /* Lecture des infos sur l'equivalence */
88 if (MEDequivInfo(fid,maa,i+1,equ,des) < 0) {
89 MESSAGE("Erreur a la lecture de l'equivalence d'indice");
90 ISCRUTE(i+1);
91 return -1;
92 }
93 printf("Nom de l'equivalence: %s \n",equ);
94 printf("Description de l'equivalence : %s \n",des);
95
96 /* Lecture des correspondances sur les differents types d'entites */
97
98 /* Les noeuds */
99 if ((ncor = MEDnCorres(fid,maa,equ,MED_NOEUD,0)) < 0) {
100 MESSAGE("Erreur a la lecture du nombre de correspondance sur les noeuds");
101 return -1;
102 }
103 printf("Il y a %d correspondances sur les noeuds \n",ncor);
104 if (ncor > 0) {
105 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
106 if (MEDequivLire(fid,maa,equ,cor,ncor,MED_NOEUD,0) < 0) {
107 MESSAGE("Erreur a la lecture des correspondances sur les noeuds");
108 ret = -1;
109 }
110 if (ret == 0)
111 for (j=0;j<ncor;j++)
112 printf("Correspondance %d : %d et %d \n",j+1,*(cor+2*j),
113 *(cor+2*j+1));
114 free(cor);
115 }
116
117 /* Les mailles : on ne prend pas en compte les mailles 3D */
118 if (ret == 0)
119 for (j=0;j<MED_NBR_MAILLE_EQU;j++) {
120
121 if ((ncor = MEDnCorres(fid,maa,equ,MED_MAILLE,typmai[j])) < 0) {
122 MESSAGE("Erreur a la lecture du nombre de correspondance sur les mailles : ");
123 ISCRUTE(typmai[j]);
124 return -1;
125 }
126 printf("Il y a %d correspondances sur les mailles %d \n",ncor,
127 typmai[j]);
128 if (ncor > 0) {
129 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
130 if (MEDequivLire(fid,maa,equ,cor,ncor,MED_MAILLE,
131 typmai[j]) < 0) {
132 MESSAGE("Erreur a la lecture des correspondances sur les mailles : ");
133 ISCRUTE(typmai[j]);
134 ret = -1;
135 }
136 if (ret == 0)
137 for (k=0;k<ncor;k++)
138 printf("Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
139 *(cor+2*k+1));
140 free(cor);
141 }
142 }
143
144 /* Les faces */
145 if (ret == 0)
146 for (j=0;j<MED_NBR_GEOMETRIE_FACE+1;j++) {
147 if ((ncor = MEDnCorres(fid,maa,equ,MED_FACE,typfac[j])) < 0) {
148 MESSAGE("Erreur a la lecture du nombre de correspondance sur les faces : ");
149 ISCRUTE(typfac[j]);
150 return -1;
151 }
152 printf("Il y a %d correspondances sur les faces %d \n",ncor,
153 typfac[j]);
154 if (ncor > 0) {
155 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
156 if (MEDequivLire(fid,maa,equ,cor,ncor,MED_FACE,
157 typfac[j]) < 0) {
158 MESSAGE("Erreur a la lecture des correspondances sur les faces : ");
159 ISCRUTE(typfac[j]);
160 ret = -1;
161 }
162 if (ret == 0)
163 for (k=0;k<ncor;k++)
164 printf("Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
165 *(cor+2*k+1));
166 free(cor);
167 }
168 }
169
170 /* Les aretes */
171 if (ret == 0)
172 for (j=0;j<MED_NBR_GEOMETRIE_ARETE;j++) {
173 if ((ncor = MEDnCorres(fid,maa,equ,MED_ARETE,typare[j])) < 0) {
174 MESSAGE("Erreur a la lecture du nombre de correspondance sur les aretes : ");
175 ISCRUTE(typare[j]);
176 return -1;
177 }
178 printf("Il y a %d correspondances sur les aretes %d \n",ncor,
179 typare[j]);
180 if (ncor > 0) {
181 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
182 if (MEDequivLire(fid,maa,equ,cor,ncor,MED_ARETE,
183 typare[j]) < 0) {
184 MESSAGE("Erreur a la lecture des correspondances sur les faces : ");
185 ISCRUTE(typare[j]);
186 ret = -1;
187 }
188 if (ret == 0)
189 for (k=0;k<ncor;k++)
190 printf("Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
191 *(cor+2*k+1));
192 free(cor);
193 }
194 }
195
196 }
197
198 /* Fermeture du fichier */
199 if (MEDfermer(fid) < 0) {
200 MESSAGE("Erreur a la fermeture du fichier ");
201 return -1;
202 }
203
204 return ret;
205 }