00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 #include <med.h>
00028 #define MESGERR 1
00029 #include "med_utils.h"
00030 #include <string.h>
00031 
00032 #ifdef DEF_LECT_ECR
00033 #define MODE_ACCES MED_LECTURE_ECRITURE
00034 #elif DEF_LECT_AJOUT
00035 #define MODE_ACCES MED_LECTURE_AJOUT
00036 #else
00037 #define MODE_ACCES MED_CREATION
00038 #endif
00039 
00040 int main (int argc, char **argv)
00041 
00042 
00043 {
00044   med_err ret = 0;
00045   med_idt fid;
00046   char maa[MED_TAILLE_NOM+1];  
00047   med_int nmaa,i,mdim,npoly,j;
00048   char desc[MED_TAILLE_DESC+1];  
00049   med_int taille;
00050   med_int *con, *index, *num, *fam;
00051   char *nom;
00052   char tmp[MED_TAILLE_PNOM+1];
00053   int ind1, ind2,k;
00054   med_maillage type;
00055 
00056   
00057   fid = MEDouvrir("test23.med",MED_LECTURE);
00058   if (fid < 0) {
00059     MESSAGE("Erreur a l'ouverture du fichier test23.med");
00060     return -1;
00061   }
00062   printf("Ouverture du fichier test23.med \n");
00063 
00064   
00065   nmaa = MEDnMaa(fid);
00066   if (nmaa < 0) {
00067     MESSAGE("Erreur a la lecture du nombre de maillage");
00068     return -1;
00069   }
00070   printf("Nombre de maillages = "IFORMAT"\n",nmaa);
00071 
00072   for (i=0;i<nmaa;i++) {
00073 
00074     
00075     if (MEDmaaInfo(fid,i+1,maa,&mdim,&type,desc) < 0) {
00076       MESSAGE("Erreur a la lecture des infos sur le maillage");
00077       return -1;
00078     }
00079     printf("maillage %d de nom [%s] et de dimension : "IFORMAT" \n",i+1,maa,mdim);
00080     
00081     
00082     if ((npoly = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_POLYGONE,MED_NOD)) < 0) {
00083       MESSAGE("Erreur a la lecture du nombre de mailles MED_POLYGONE");
00084       return -1;
00085     }
00086     printf("Nombre de mailles polygones en mode nodal : "IFORMAT" \n",npoly); 
00087 
00088     
00089     if (MEDpolygoneInfo(fid,maa,MED_MAILLE,MED_NOD,&taille) < 0) {
00090       MESSAGE("Erreur a la lecture des infos sur les maillaes MED_POLYGONE");
00091       return -1;
00092     }
00093     printf("Taille a allouer pour la connectivite des polygones : "IFORMAT" \n",taille); 
00094 
00095     
00096 
00097 
00098 
00099 
00100 
00101     index = (med_int *) malloc(sizeof(med_int)*(npoly+1));
00102     con = (med_int *) malloc(sizeof(med_int)*taille);
00103     num = (med_int *) malloc(sizeof(med_int)*npoly);
00104     fam = (med_int *) malloc(sizeof(med_int)*npoly);
00105     nom = (char *) malloc(sizeof(char)*MED_TAILLE_PNOM*npoly+1);
00106 
00107     
00108     if (MEDpolygoneConnLire(fid,maa,index,npoly+1,con,MED_MAILLE,MED_NOD) < 0) {
00109       MESSAGE("Erreur a la lecture de la connectivite des mailles MED_POLYGONE");
00110       ret = -1;
00111     }
00112     printf("Lecture de la connectivite des mailles MED_POLYGONE en mode nodal \n");
00113 
00114     
00115     if (ret == 0) {
00116       if (MEDnomLire(fid,maa,nom,npoly,MED_MAILLE,MED_POLYGONE) < 0) {
00117         MESSAGE("Erreur a la lecture des noms des mailles MED_POLYGONE");
00118         ret = -1;
00119       }
00120       printf("Lecture des noms des mailles MED_POLYGONE \n");
00121     }
00122     
00123     
00124     if (ret == 0) {
00125       if (MEDnumLire(fid,maa,num,npoly,MED_MAILLE,MED_POLYGONE) < 0) {
00126         MESSAGE("Erreur a la lecture des numeros des mailles MED_POLYGONE");
00127         ret = -1;
00128       }
00129       printf("Lecture des numeros des mailles MED_POLYGONE \n");
00130     }
00131 
00132     
00133     if (ret == 0) {
00134       if ((ret = MEDfamLire(fid,maa,fam,npoly,MED_MAILLE,MED_POLYGONE)) < 0) {
00135         MESSAGE("Erreur a la lecture des numeros de famille des mailles MED_POLYGONE");
00136         ret = -1;
00137       }
00138       printf("Lecture des numeros de familles des mailles MED_POLYGONE \n");
00139     }
00140 
00141     if (ret == 0) {
00142       printf("Affichage des resultats \n");
00143       for (j=0;j<npoly;j++) {
00144         printf(">> Maille MED_POLYGONE "IFORMAT" : \n",j+1);
00145         printf("---- Connectivite       ----- : [ ");
00146         ind1 = *(index+j)-1;
00147         ind2 = *(index+j+1)-1;
00148         for (k=ind1;k<ind2;k++)
00149           printf(IFORMAT" ",*(con+k));
00150         printf(" ] \n");
00151         strncpy(tmp,nom+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
00152         tmp[MED_TAILLE_PNOM] = '\0';
00153         printf("---- Nom                ----- : %s \n",tmp);
00154         printf("---- Numero             ----- : "IFORMAT" \n",*(num+j));
00155         printf("---- Numero de famille  ----- : "IFORMAT" \n",*(fam+j));
00156       }
00157     }
00158 
00159     
00160     free(index);
00161     free(con);
00162     free(num);
00163     free(fam);
00164     free(nom);
00165   }
00166 
00167   
00168   if (MEDfermer(fid) < 0) {
00169     MESSAGE("Erreur a la fermeture du fichier");
00170     return -1;
00171   }
00172   printf("Fermeture du fichier \n");
00173  
00174   return ret; 
00175 }