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 #include <med.h>
00027 #define MESGERR 1
00028 #include "med_utils.h"
00029 #include <string.h>
00030
00031 #ifdef DEF_LECT_ECR
00032 #define MODE_ACCES MED_LECTURE_ECRITURE
00033 #elif DEF_LECT_AJOUT
00034 #define MODE_ACCES MED_LECTURE_AJOUT
00035 #else
00036 #define MODE_ACCES MED_CREATION
00037 #endif
00038
00039 int main (int argc, char **argv)
00040
00041
00042 {
00043 int i;
00044 med_err ret = 0;
00045 med_idt fid;
00046
00047 med_int mdim,axe,j;
00048 med_float *indices;
00049 med_int nind,nmaa;
00050
00051 char maa[MED_TAILLE_NOM+1];
00052
00053 char comp[MED_TAILLE_PNOM+1];
00054 char unit[MED_TAILLE_PNOM+1];
00055 char desc[MED_TAILLE_DESC+1];
00056 med_maillage type_maillage;
00057 med_type_grille type;
00058 med_table quoi;
00059 med_int nnoeuds;
00060 char *comp2, *unit2;
00061 med_float *coo;
00062 med_int *structure_grille;
00063 med_repere repere;
00064
00065
00066 fid = MEDouvrir("test27.med",MED_LECTURE);
00067 if (fid < 0) {
00068 MESSAGE("Erreur a l'ouverture du fichier test27.med");
00069 return -1;
00070 }
00071
00072
00073 nmaa = MEDnMaa(fid);
00074 if (nmaa < 0) {
00075 MESSAGE("Erreur a la lecture du nombre de maillage");
00076 return -1;
00077 }
00078
00079
00080
00081 for (i=0;i<nmaa;i++) {
00082
00083
00084 if (MEDmaaInfo(fid,i+1,maa,&mdim,&type_maillage,desc) < 0) {
00085 MESSAGE("Erreur a la lecture des infos sur le maillage");
00086 return -1;
00087 }
00088 printf("Maillage de nom [%s] de dimension "IFORMAT" \n",maa,mdim);
00089 if (type_maillage == MED_STRUCTURE)
00090 printf("- Type : Maillage structure \n");
00091 else
00092 printf("- Type : Maillage non structure \n");
00093
00094
00095 if (type_maillage == MED_STRUCTURE) {
00096 if (MEDnatureGrilleLire(fid,maa,&type) < 0) {
00097 MESSAGE("Erreur a la lecture de la nature d'une grille");
00098 return -1;
00099 }
00100 if (type == MED_GRILLE_CARTESIENNE)
00101 printf("- Grille cartesienne \n");
00102 if (type == MED_GRILLE_STANDARD)
00103 printf("- Grille de-structureee \n");
00104 }
00105
00106
00107 if (type_maillage == MED_STRUCTURE && type == MED_GRILLE_STANDARD) {
00108
00109 nnoeuds = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0);
00110 if (nnoeuds < 0) {
00111 MESSAGE("Erreur a la lecture du nombre de noeuds");
00112 return -1;
00113 }
00114 printf("Nombre de noeuds : "IFORMAT" \n",nnoeuds);
00115
00116 structure_grille = (med_int *) malloc(sizeof(med_int)*mdim);
00117 if (MEDstructureCoordLire(fid,maa,mdim,structure_grille) < 0) {
00118 MESSAGE("Erreur a la lecture de la structure de la grille");
00119 ret = -1;
00120 }
00121 if (ret == 0) {
00122 printf("Structure des noeuds de la grille : [ ");
00123 for (j=0;j<mdim;j++)
00124 printf(" "IFORMAT" ",*(structure_grille+j));
00125 printf(" ] \n");
00126 free(structure_grille);
00127 }
00128
00129 if (ret == 0) {
00130 coo = (med_float *) malloc(sizeof(med_float)*nnoeuds*mdim);
00131 comp2 = (char *) malloc(sizeof(char)*(mdim*MED_TAILLE_PNOM+1));
00132 unit2 = (char *) malloc(sizeof(char)*(mdim*MED_TAILLE_PNOM+1));
00133
00134 if ((ret = MEDcoordLire(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_ALL,NULL,0,
00135 &repere,comp2,unit2)) < 0) {
00136 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00137 ret = -1;
00138 }
00139 }
00140
00141 if (ret == 0) {
00142 printf("Coordonnees : [ ");
00143 for (j=0;j<nnoeuds*mdim;j++)
00144 printf(" %f ",*(coo+j));
00145 printf(" ] \n");
00146 free(coo);
00147 free(comp2);
00148 free(unit2);
00149 }
00150 }
00151
00152
00153 if (type_maillage == MED_STRUCTURE && type == MED_GRILLE_CARTESIENNE)
00154 for(axe=1;axe<=mdim;axe++) {
00155 switch(axe) {
00156 case 1 :
00157 quoi = MED_COOR_IND1;
00158 break;
00159
00160 case 2 :
00161 quoi = MED_COOR_IND2;
00162 break;
00163
00164 case 3 :
00165 quoi = MED_COOR_IND3;
00166 break;
00167
00168 default :
00169 return -1;
00170 }
00171
00172 nind = MEDnEntMaa(fid,maa,quoi,MED_NOEUD,0,0);
00173 if (nind < 0) {
00174 MESSAGE("Erreur a la lecture de la taille de l'indice");
00175 return -1;
00176 }
00177 printf("Lecture de la taille de l'indice : "IFORMAT" \n",nind);
00178
00179
00180 indices = (med_float *) malloc(sizeof(med_float)*nind);
00181 if (MEDindicesCoordLire(fid,maa,mdim,indices,nind,axe,comp,unit) < 0) {
00182 MESSAGE("Erreur a lecture de indices de coordonnees");
00183 ret = -1;
00184 }
00185 if (ret == 0) {
00186 printf("Axe %s [%s] : [ ",comp,unit);
00187 for (j=0;j<nind;j++)
00188 printf(" %f ",indices[j]);
00189 printf(" ] \n");
00190 free(indices);
00191 }
00192 }
00193 }
00194
00195
00196 if (MEDfermer(fid) < 0) {
00197 MESSAGE("Erreur a la fermeture du fichier");
00198 return -1;
00199 }
00200 printf("Fermeture du fichier \n");
00201
00202 return ret;
00203 }