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_ACC_RDWR
00034 #elif DEF_LECT_AJOUT
00035 #define MODE_ACCES MED_ACC_RDEXT
00036 #else
00037 #define MODE_ACCES MED_ACC_CREAT
00038 #endif
00039
00040 int main (int argc, char **argv)
00041
00042 #define MAXDIM 3
00043
00044 {
00045 med_err ret = 0;
00046 med_idt fid;
00047 char maa[MED_NAME_SIZE+1];
00048 med_int nmaa,i,mdim,nindex,npoly,j,nind,nnoe;
00049 char desc[MED_COMMENT_SIZE+1];
00050 med_int *con, *index, *num, *fam;
00051 char *nom;
00052 char tmp[MED_SNAME_SIZE+1];
00053 int ind1, ind2,k;
00054 char dtunit[MED_SNAME_SIZE+1]="";
00055 char nomcoo[MAXDIM*MED_SNAME_SIZE+1];
00056 char unicoo[MAXDIM*MED_SNAME_SIZE+1];
00057 med_mesh_type type;
00058 med_sorting_type sort;
00059 med_axis_type rep;
00060 med_int nstep=0,spacedim=0;
00061 med_bool inoele=MED_FALSE,inuele=MED_FALSE,chgt=MED_FALSE,trsf=MED_FALSE;
00062
00063
00064 fid = MEDfileOpen("test23.med",MED_ACC_RDONLY);
00065 if (fid < 0) {
00066 MESSAGE("Erreur a l'ouverture du fichier test23.med");
00067 return -1;
00068 }
00069 printf("Ouverture du fichier test23.med \n");
00070
00071
00072 nmaa = MEDnMesh(fid);
00073 if (nmaa < 0) {
00074 MESSAGE("Erreur a la lecture du nombre de maillage");
00075 return -1;
00076 }
00077 printf("Nombre de maillages = "IFORMAT"\n",nmaa);
00078
00079 for (i=0;i<nmaa;i++) {
00080
00081
00082 if ( MEDmeshInfo( fid, i+1, maa, &spacedim, &mdim, &type, desc, dtunit, &sort,
00083 &nstep, &rep, nomcoo,unicoo) < 0 ) {
00084 MESSAGE("Erreur a la lecture des infos sur le maillage");
00085 return -1;
00086 } else {
00087 printf("maillage "IFORMAT" de nom [%s] et de dimension : "IFORMAT" , et de type %d\n",i+1,maa,mdim,type);
00088 printf("\t -Dimension de l'espace : "IFORMAT"\n",spacedim);
00089 printf("\t -Description du maillage : |%s|\n",desc);
00090 printf("\t -Noms des axes : |%s|\n",nomcoo);
00091 printf("\t -Unités des axes : |%s|\n",unicoo);
00092 printf("\t -Type de repère : %d\n",rep);
00093 printf("\t -Nombre d'étapes de calcul : "IFORMAT"\n",nstep);
00094 printf("\t -Unité des dates : |%s|\n",dtunit);
00095 }
00096
00097
00098 if ((nind = MEDmeshnEntity(fid,maa,MED_NO_DT,MED_NO_IT,
00099 MED_CELL,MED_POLYGON,MED_INDEX_NODE,MED_NODAL,
00100 &chgt,&trsf)) < 0) {
00101 MESSAGE("Erreur a la lecture du nombre de mailles MED_POLYGONE");
00102 return -1;
00103 }
00104 npoly = nind-1;
00105 printf("Nombre de mailles polygones en mode nodal : "IFORMAT" \n",npoly);
00106
00107
00108
00109 if ((nnoe = MEDmeshnEntity(fid,maa,MED_NO_DT,MED_NO_IT,
00110 MED_CELL,MED_POLYGON,MED_CONNECTIVITY,MED_NODAL,
00111 &chgt,&trsf)) < 0) {
00112 MESSAGE("Erreur a la lecture du nombre de mailles MED_POLYGONE");
00113 return -1;
00114 }
00115
00116 printf("Taille a allouer pour la connectivite des polygones : "IFORMAT" \n",nnoe);
00117
00118
00119
00120
00121
00122
00123
00124 index = (med_int *) malloc(sizeof(med_int)*nind);
00125 con = (med_int *) malloc(sizeof(med_int)*nnoe);
00126 num = (med_int *) malloc(sizeof(med_int)*npoly);
00127 fam = (med_int *) malloc(sizeof(med_int)*npoly);
00128 nom = (char *) malloc(sizeof(char)*MED_SNAME_SIZE*npoly+1);
00129
00130
00131 if (MEDmeshPolygonRd(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_NODAL,
00132 index,con) < 0) {
00133 MESSAGE("Erreur a la lecture de la connectivite des mailles MED_POLYGONE");
00134 return -1;
00135 }
00136 printf("Lecture de la connectivite des mailles MED_POLYGONE en mode nodal \n");
00137
00138
00139 if (MEDmeshEntityNameRd(fid, maa, MED_NO_DT, MED_NO_IT,
00140 MED_CELL, MED_POLYGON,nom) < 0)
00141 inoele = MED_FALSE;
00142 else
00143 inoele = MED_TRUE;
00144
00145
00146 if ( MEDmeshEntityNumberRd(fid, maa, MED_NO_DT, MED_NO_IT,
00147 MED_CELL, MED_POLYGON, num) < 0)
00148 inuele = MED_FALSE;
00149 else
00150 inuele = MED_TRUE;
00151
00152
00153 if (MEDmeshEntityFamilyNumberRd(fid,maa, MED_NO_DT, MED_NO_IT,
00154 MED_CELL, MED_POLYGON,fam) < 0) {
00155 MESSAGE("Erreur a la lecture des numéros de famille des segments");
00156
00157 return -1;
00158 }
00159
00160
00161 if (ret == 0) {
00162 printf("Affichage des resultats \n");
00163 for (j=0;j<npoly;j++) {
00164 printf(">> Maille MED_POLYGONE "IFORMAT" : \n",j+1);
00165 printf("---- Connectivite ----- : [ ");
00166 ind1 = *(index+j)-1;
00167 ind2 = *(index+j+1)-1;
00168 for (k=ind1;k<ind2;k++)
00169 printf(IFORMAT" ",*(con+k));
00170 printf(" ] \n");
00171 strncpy(tmp,nom+j*MED_SNAME_SIZE,MED_SNAME_SIZE);
00172 tmp[MED_SNAME_SIZE] = '\0';
00173 if (inoele) printf("---- Nom ----- : |%s| \n",tmp);
00174 if (inuele) printf("---- Numero ----- : "IFORMAT" \n",*(num+j));
00175 printf("---- Numero de famille ----- : "IFORMAT" \n",*(fam+j));
00176 }
00177 }
00178
00179
00180 free(index);
00181 free(con);
00182 free(num);
00183 free(fam);
00184 free(nom);
00185 }
00186
00187
00188 if (MEDfileClose(fid) < 0) {
00189 MESSAGE("Erreur a la fermeture du fichier");
00190 return -1;
00191 }
00192 printf("Fermeture du fichier \n");
00193
00194 return ret;
00195 }