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 }