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