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 }