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 }