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 }