int main (int argc, char **argv) { med_err ret = 0; med_idt fid; char maa[MED_TAILLE_NOM+1]; med_int nmaa,i,mdim,npoly,j; char desc[MED_TAILLE_DESC+1]; med_int taille,nf,np; med_int taille2,nf2,np2; med_int *conn, *conn2, *indexf, *indexf2, *num, *fam; med_int *indexp, *indexp2; char *nom; char tmp[MED_TAILLE_PNOM+1]; int ind1, ind2,k,nfaces,nnoeuds,l; med_maillage type; /* Ouverture du fichier test25.med en lecture seule */ fid = MEDouvrir("test25.med",MED_LECTURE); if (fid < 0) { MESSAGE("Erreur a l'ouverture du fichier test25.med"); return -1; } printf("Ouverture du fichier test25.med \n"); /* Lecture du nombre de maillages */ nmaa = MEDnMaa(fid); if (nmaa < 0) { MESSAGE("Erreur a lecture du nombre de maillage"); return -1; } printf("Nombre de maillages = "IFORMAT"\n",nmaa); for (i=0;i<nmaa;i++) if (ret == 0) { /* Lecture des infos sur le maillage */ if (MEDmaaInfo(fid,i+1,maa,&mdim,&type,desc) < 0) { MESSAGE("Erreur a lecture des infos sur le maillage"); return -1; } printf("maillage "IFORMAT" de nom [%s] et de dimension : "IFORMAT" \n",i+1,maa,mdim); /* Combien de mailles polyedres en mode nodal */ if ((npoly = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_POLYEDRE,MED_NOD)) < 0) { MESSAGE("Erreur a lecture du nombre de maille MED_POLYEDRE en mode nodal"); return -1; } printf("Nombre de mailles polyedres : "IFORMAT" \n",npoly); /* Quelle taille pour le tableau des connectivites et d'indexation en mode MED_NOD */ if (MEDpolyedreInfo(fid,maa,MED_NOD,&nf,&taille) < 0) { MESSAGE("Erreur a lecture des infos sur les polyedres"); return -1; } printf("Taille a allouer pour la connectivite nodale des polyedres : "IFORMAT" \n",taille); printf("Taille a allouer pour le tableau d'indexation des faces : "IFORMAT" \n",nf); /* Quelle taille pour le tableau des connectivites et d'indexation en mode MED_DESC */ if (MEDpolyedreInfo(fid,maa,MED_DESC,&nf2,&taille2) < 0) { MESSAGE("Erreur a la lecture des infos sur les polyedres"); return -1; } printf("Taille a allouer pour la connectivite descendante des polyedres : "IFORMAT" \n",taille2); printf("Taille a allouer pour le tableau d'indexation des types de faces : "IFORMAT" \n",nf2); /* Allocation memoire : * - tableau indexp et indexp2 : npoly + 1 * - tableau indexf et indexf2 : nf et nf2 * - tableau des connectivites : consize * - tableaux numeros et numeros de familles : npoly * - tableau des noms : MED_TAILLE_PNOM*npoly + 1 */ indexp = (med_int *) malloc(sizeof(med_int)*(npoly+1)); indexp2 = (med_int *) malloc(sizeof(med_int)*(npoly+1)); indexf = (med_int *) malloc(sizeof(med_int)*nf); indexf2 = (med_int *) malloc(sizeof(med_int)*nf2); conn = (med_int *) malloc(sizeof(med_int)*taille); conn2 = (med_int *) malloc(sizeof(med_int)*taille2); num = (med_int *) malloc(sizeof(med_int)*npoly); fam = (med_int *) malloc(sizeof(med_int)*npoly); nom = (char *) malloc(sizeof(char)*MED_TAILLE_PNOM*npoly+1); /* Lecture de la connectivite des mailles polyedres en mode nodal */ if (MEDpolyedreConnLire(fid,maa,indexp,npoly+1,indexf,nf,conn,MED_NOD) < 0) { MESSAGE("Erreur a lecture de la connectivite nodale des polyedres"); ret = -1; } printf("Lecture de la connectivite des mailles MED_POLYEDRE en mode nodal \n"); /* Lecture de la connectivite des mailles polyedres en mode descendant */ if (ret == 0) { if (MEDpolyedreConnLire(fid,maa,indexp2,npoly+1,indexf2,nf2,conn2,MED_DESC) < 0) { MESSAGE("Erreur a lecture de la connectivite descendante des polyedres"); ret = -1; } printf("Lecture de la connectivite des mailles MED_POLYEDRE en mode descendant \n"); } /* Lecture noms */ if (ret == 0) { if (MEDnomLire(fid,maa,nom,npoly,MED_MAILLE,MED_POLYEDRE) < 0) { MESSAGE("Erreur a lecture des noms des polyedres"); ret = -1; } printf("Lecture des noms des mailles MED_POLYEDRE \n"); } /* Lecture des numeros */ if (ret == 0) { if (MEDnumLire(fid,maa,num,npoly,MED_MAILLE,MED_POLYEDRE) < 0) { MESSAGE("Erreur a lecture des numeros des polyedres"); ret = -1; } printf("Lecture des numeros des mailles MED_POLYEDRE \n"); } /* Lecture des numeros de familles */ if (ret == 0) { if (MEDfamLire(fid,maa,fam,npoly,MED_MAILLE,MED_POLYEDRE) < 0) { MESSAGE("Erreur a lecture des numeros de famille des polyedres"); ret = -1; } printf("Lecture des numeros de familles des mailles MED_POLYEDRE \n"); } if (ret == 0) { printf("Affichage des resultats \n"); for (j=0;j<npoly;j++) { printf(">> Maille MED_POLYEDRE "IFORMAT" : \n",j+1); printf("---- Connectivite nodale ----- : \n"); nfaces = *(indexp+j+1) - *(indexp+j); /* ind1 = indice dans "indexf" pour acceder aux numeros des faces */ ind1 = *(indexp+j) - 1; for (k=0;k<nfaces;k++) { /* ind2 = indice dans "conn" pour acceder au premier noeud de la face */ ind2 = *(indexf+ind1+k) - 1; nnoeuds = *(indexf+ind1+k+1) - *(indexf+ind1+k); printf(" - Face %d : [ ", k+1); for (l=0;l<nnoeuds;l++) printf(" "IFORMAT" ",*(conn+ind2+l)); printf(" ] \n"); } printf("---- Connectivite descendante ----- : \n"); nfaces = *(indexp2+j+1) - *(indexp2+j); /* ind1 = indice dans "conn2" pour acceder aux numeros des faces */ ind1 = *(indexp2+j) - 1; for (k=0;k<nfaces;k++) printf(" - Face %d de numero : "IFORMAT" et de type "IFORMAT" \n", k+1,*(conn2+ind1+k),*(indexf2+ind1+k)); strncpy(tmp,nom+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM); tmp[MED_TAILLE_PNOM] = '\0'; printf("---- Nom ----- : %s \n",tmp); printf("---- Numero ----- : "IFORMAT" \n",*(num+j)); printf("---- Numero de famille ----- : "IFORMAT" \n",*(fam+j)); } } /* liberation de la memoire */ free(indexp); free(indexp2); free(indexf); free(indexf2); free(conn); free(conn2); free(num); free(fam); free(nom); } /* Fermeture du fichier */ if (MEDfermer(fid) < 0) { MESSAGE("Erreur a fermeture du fichier"); return -1; } printf("Fermeture du fichier \n"); return ret; }
int main (int argc, char **argv) { med_err ret = 0; med_idt fid; med_int nse2; med_int *se2_1; med_int *se2_2; char *nomse2; med_int *numse2; med_int *nufase2; med_int ntr3; med_int *tr3; char *nomtr3; med_int *numtr3; med_int *nufatr3; char maa[MED_TAILLE_NOM+1] ="maa1"; med_int mdim = 2; med_booleen inoele,inuele; med_int tse2,ttr3; med_int i; char str[MED_TAILLE_PNOM+1]; med_int profil[2] = { 2, 3 }; char desc[MED_TAILLE_DESC+1]; med_maillage type; /* Ouverture du fichier en mode lecture seule */ if ((fid = MEDouvrir("test6.med",MED_LECTURE)) < 0) { MESSAGE("Erreur a l'ouverture du fichier test6.med"); return -1; } /* Lecture des informations sur le premier maillage */ if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) { MESSAGE("Erreur a la lecture des information sur le 1er maillage"); return -1; } else printf("Maillage de nom : %s et de dimension %d \n",maa,mdim); /* Combien de triangles et de segments */ if ((nse2 = MEDnEntMaa(fid,maa,MED_CONN,MED_ARETE,MED_SEG2,MED_DESC)) < 0) { MESSAGE("Erreur a la lecture du nombre de faces MED_SEG2"); return -1; } if ((ntr3 = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_TRIA3,MED_DESC))<0) { MESSAGE("Erreur a la lecture du nombre de mailles MED_TRIA3"); return -1; } printf("Nombre de MED_SEG2 : "IFORMAT" - nombre de MED_TRIA3 : "IFORMAT"\n",nse2,ntr3); /* Allocations memoire */ tse2 = 2; se2_1 = (med_int*) calloc(tse2*nse2,sizeof(med_int)); se2_2 = (med_int*) malloc(sizeof(med_int)*tse2*nse2); nomse2 = (char*) malloc(MED_TAILLE_PNOM*nse2+1); numse2 = (med_int*) malloc(sizeof(med_int)*nse2); nufase2 = (med_int*) malloc(sizeof(med_int)*nse2); ttr3 = 3; tr3 = (med_int*) malloc(sizeof(med_int)*ntr3*ttr3); nomtr3 = (char*) malloc(MED_TAILLE_PNOM*ntr3+1); numtr3 = (med_int*) malloc(sizeof(med_int)*ntr3); nufatr3 = (med_int*) malloc(sizeof(med_int)*ntr3); /* Lecture des connectivites des segments avec profil */ if (MEDconnLire(fid,maa,mdim,se2_1,MED_FULL_INTERLACE,profil,2, MED_ARETE,MED_SEG2,MED_DESC) < 0) { MESSAGE("Erreur a la lecture de la connectivite des segments"); return -1; } /* Lecture de la connectivite des segments */ if (MEDconnLire(fid,maa,mdim,se2_2,MED_FULL_INTERLACE,NULL,0, MED_ARETE ,MED_SEG2,MED_DESC) < 0) { MESSAGE("Erreur a la lecture de la connectivite des segments"); return -1; } /* Lecture (optionnelle) des noms des segments */ if (MEDnomLire(fid,maa,nomse2,nse2,MED_ARETE,MED_SEG2) < 0) inoele = MED_FAUX; else inoele = MED_VRAI; /* Lecture (optionnelle) des numeros des segments */ if (MEDnumLire(fid,maa,numse2,nse2,MED_ARETE,MED_SEG2) < 0) inuele = MED_FAUX; else inuele = MED_VRAI; /* Lecture des numeros des familles des segments */ if (MEDfamLire(fid,maa,nufase2,nse2,MED_ARETE,MED_SEG2) < 0) { MESSAGE("Erreur a la lecture des numéros de famille des segments"); return -1; } /* Lecture de la connectivite des triangles */ if (MEDconnLire(fid,maa,mdim,tr3,MED_NO_INTERLACE,NULL,0,MED_MAILLE,MED_TRIA3, MED_DESC) < 0) { MESSAGE("Erreur a la lecture de la connectivite des triangles"); return -1; } /* Lecture (optionnelle) des noms des triangles */ if (MEDnomLire(fid,maa,nomtr3,ntr3,MED_MAILLE,MED_TRIA3) < 0) inoele = MED_FAUX; else inoele = MED_VRAI; /* Lecture (optionnelle) des numeros des triangles */ if (MEDnumLire(fid,maa,numtr3,ntr3,MED_MAILLE,MED_TRIA3) < 0) inuele = MED_FAUX; else inuele = MED_VRAI; /* Lecture des numeros des familles des triangles */ if (ret = MEDfamLire(fid,maa,nufatr3,ntr3,MED_MAILLE,MED_TRIA3) < 0) { MESSAGE("Erreur a la lecture des numeros de famille des segments"); return -1; } /* Fermeture du fichier */ if (MEDfermer(fid) < 0) { MESSAGE("Erreur a la fermeture du fichier"); return -1; } /* Affichage */ if (ret == 0) { printf("Connectivite des segments (1): \n"); for (i=0;i<nse2*tse2;i++) printf(IFORMAT" ",*(se2_1+i)); printf("\n"); printf("Connectivite des segments (2): \n"); for (i=0;i<nse2*tse2;i++) printf(IFORMAT" ",*(se2_2+i)); if (inoele) { printf("\nNoms des segments :\n"); for (i=0;i<nse2;i++) { strncpy(str,nomse2+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM); str[MED_TAILLE_PNOM] = '\0'; printf("%s ",str); } } if (inuele) { printf("\nNumeros des segments :\n"); for (i=0;i<nse2;i++) printf(IFORMAT" ",*(numse2+i)); } printf("\nNumeros des familles des segments :\n"); for (i=0;i<nse2;i++) printf(IFORMAT" ",*(nufase2+i)); printf("\nConnectivite des triangles : \n"); for (i=0;i<ntr3*ttr3;i++) printf(IFORMAT" ",*(tr3+i)); if (inoele) { printf("\nNoms des triangles :\n"); for (i=0;i<ntr3;i++) { strncpy(str,nomtr3+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM); str[MED_TAILLE_PNOM] = '\0'; printf("%s ",str); } } if (inuele) { printf("\nNumeros des triangles :\n"); for (i=0;i<ntr3;i++) printf(IFORMAT" ",*(numtr3+i)); } printf("\nNumeros des familles des triangles :\n"); for (i=0;i<ntr3;i++) printf(IFORMAT" ",*(nufatr3+i)); printf("\n"); } /* Nettoyage memoire */ free(se2_1); free(se2_2); free(nomse2); free(numse2); free(nufase2); free(tr3); free(nomtr3); free(numtr3); free(nufatr3); return ret; }