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_ACC_RDWR
00033 #elif DEF_LECT_AJOUT
00034 #define MODE_ACCES MED_ACC_RDEXT
00035 #else
00036 #define MODE_ACCES MED_ACC_CREAT
00037 #endif
00038
00039 int main (int argc, char **argv)
00040
00041
00042 {
00043 med_err ret = 0;
00044 med_idt fid=0;
00045
00046 med_int mdim=0,sdim=0;
00047
00048 char maa[MED_NAME_SIZE+1]="";
00049
00050 med_int nnoe = 0;
00051
00052 med_float *coo1=NULL,*coo2=NULL;
00053
00054
00055 char nomcoo[2*MED_SNAME_SIZE+1];
00056 char unicoo[2*MED_SNAME_SIZE+1];
00057
00058
00059
00060 char *nomnoe=NULL;
00061 med_int *numnoe=NULL, *nufano=NULL;
00062 med_axis_type rep;
00063 med_bool inonoe=MED_FALSE,inunoe=MED_FALSE,chgt=MED_FALSE,trsf=MED_FALSE;
00064 char str[MED_SNAME_SIZE+1];
00065 med_int flt[2] = { 2, 3 };
00066 char desc[MED_COMMENT_SIZE+1]="";
00067 char dtunit[MED_SNAME_SIZE+1]="";
00068 med_mesh_type type;
00069 med_sorting_type sort;
00070 med_int nstep=0,i=0;
00071 med_filter filter=MED_FILTER_INIT;
00072 med_int isolatednodes=0;
00073 med_int verticesnodes=0;
00074 med_int cellmaxnodes=0;
00075
00076
00077 fid = MEDfileOpen("test4.med",MED_ACC_RDONLY);
00078 if (fid < 0) {
00079 MESSAGE("Erreur a l'ouverture du fichier test4.med");
00080 return -1;
00081 }
00082
00083 if ((sdim=MEDmeshnAxis(fid, 1)) <0) {
00084 MESSAGE("Erreur a la lecture de la dimension de l'espace du maillage :");
00085 SSCRUTE(maa);
00086 ret = -1;
00087 }
00088
00089
00090 if ( MEDmeshInfo( fid, 1, maa, &sdim, &mdim, &type, desc, dtunit, &sort,
00091 &nstep, &rep, nomcoo,unicoo) < 0 ) {
00092 MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
00093 return -1;
00094 } else {
00095 printf("Maillage de nom : |%s| , de dimension : "IFORMAT" , et de type %d\n",maa,mdim,type);
00096 printf("\t -Dimension de l'espace : "IFORMAT"\n",sdim);
00097 printf("\t -Description du maillage : |%s|\n",desc);
00098 printf("\t -Noms des axes : |%s|\n",nomcoo);
00099 printf("\t -Unités des axes : |%s|\n",unicoo);
00100 printf("\t -Type de repère : %d\n",rep);
00101 printf("\t -Nombre d'étape de calcul : "IFORMAT"\n",nstep);
00102 printf("\t -Unité des dates : |%s|\n",dtunit);
00103 }
00104
00105 if (MEDmeshAttributeRd( fid, maa, &isolatednodes, &verticesnodes, &cellmaxnodes) < 0 ) {
00106 MESSAGE("Aucune définition des attributs des noeuds du maillage");
00107 } else {
00108 printf("\t -Nombre de noeuds isolés : "IFORMAT"\n",isolatednodes);
00109 printf("\t -Nombre de noeuds sommets : "IFORMAT"\n",verticesnodes);
00110 printf("\t -Nombre maximum de noeuds par maille : "IFORMAT"\n",cellmaxnodes);
00111 }
00112
00113
00114
00115 nnoe = MEDmeshnEntity(fid,maa,MED_NO_DT,MED_NO_IT,
00116 MED_NODE,MED_NONE,MED_COORDINATE,MED_NO_CMODE,
00117 &chgt,&trsf);
00118 if (nnoe < 0) {
00119 MESSAGE("Erreur a la lecture du nombre de noeuds dans : ");
00120 ret = -1;
00121 } else
00122 printf("Nombre de noeuds : "IFORMAT" \n",nnoe);
00123
00124
00125 if (nnoe > 0) {
00126
00127
00128 coo1 = (med_float*) calloc(nnoe*sdim,sizeof(med_float));
00129 coo2 = (med_float*) calloc(nnoe*sdim,sizeof(med_float));
00130
00131
00132 numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
00133 nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
00134
00135
00136 nomnoe = (char*) malloc(MED_SNAME_SIZE*nnoe+1);
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 2,
00149 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00150 MED_NO_PROFILE, MED_UNDEF_SIZE,
00151 NULL, &filter) < 0 ) {
00152 MESSAGE("Erreur à la création du filtre 1.");
00153 }
00154
00155
00156 if (nnoe > 0) {
00157 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00158 &filter, coo1) < 0 ) {
00159 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00160 ret = -1;
00161 } else {
00162 printf("Valeur de coo1 : ");
00163 for (i=0;i<nnoe*sdim;i++)
00164 printf("%4.2f ",coo1[i]);
00165 printf("\n");
00166 }
00167 }
00168
00169 MEDfilterClose(&filter);
00170 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 1,
00171 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00172 MED_NO_PROFILE, MED_UNDEF_SIZE,
00173 NULL, &filter) < 0 ) {
00174 MESSAGE("Erreur à la création du filtre 2.");
00175 }
00176
00177
00178
00179 if (nnoe > 0) {
00180 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00181 &filter, coo1) < 0 ) {
00182 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00183 ret = -1;
00184 } else {
00185 printf("Valeur de coo1 : ");
00186 for (i=0;i<nnoe*sdim;i++)
00187 printf("%4.2f ",coo1[i]);
00188 printf("\n");
00189 }
00190 }
00191
00192 MEDfilterClose(&filter);
00193 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 1,
00194 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00195 MED_NO_PROFILE, 2,
00196 flt, &filter) < 0 ) {
00197 MESSAGE("Erreur à la création du filtre 3.");
00198 }
00199
00200
00201 if (nnoe > 0) {
00202 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00203 &filter, coo2) < 0 ) {
00204 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00205 ret = -1;
00206 } else {
00207 printf("Valeur de coo2 : ");
00208 for (i=0;i<nnoe*sdim;i++)
00209 printf("%4.2f ",coo2[i]);
00210 printf("\n");
00211 }
00212 }
00213
00214 MEDfilterClose(&filter);
00215 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 2,
00216 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00217 MED_NO_PROFILE, 2,
00218 flt, &filter) < 0 ) {
00219 MESSAGE("Erreur à la création du filtre 4.");
00220 }
00221
00222
00223 if (nnoe > 0) {
00224 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00225 &filter, coo2) < 0 ) {
00226 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00227 ret = -1;
00228 } else {
00229 printf("Valeur de coo2 : ");
00230 for (i=0;i<nnoe*sdim;i++) {
00231 printf("%4.2f ",coo2[i]);
00232 coo2[i] = 0.0;
00233 }
00234 printf("\n");
00235 }
00236 }
00237
00238 MEDfilterClose(&filter);
00239 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, MED_ALL_CONSTITUENT,
00240 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00241 MED_NO_PROFILE, 2,
00242 flt, &filter) < 0 ) {
00243 MESSAGE("Erreur à la création du filtre 5.");
00244 }
00245
00246
00247 if (nnoe > 0) {
00248 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00249 &filter, coo2) < 0 ) {
00250 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00251 ret = -1;
00252 } else {
00253 printf("Valeur de coo2 : ");
00254 for (i=0;i<nnoe*sdim;i++) {
00255 printf("%4.2f ",coo2[i]);
00256 coo2[i] = 0.0;
00257 }
00258 printf("\n");
00259 }
00260 }
00261 MEDfilterClose(&filter);
00262
00263
00264 if (nnoe > 0) {
00265 if ( MEDmeshNodeCoordinateRd(fid, maa, MED_NO_DT, MED_NO_IT,
00266 MED_FULL_INTERLACE, coo2) < 0 ) {
00267 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00268 ret = -1;
00269 } else {
00270 printf("Valeur de coo2 : ");
00271 for (i=0;i<nnoe*sdim;i++)
00272 printf("%4.2f ",coo2[i]);
00273 printf("\n");
00274 }
00275 }
00276
00277
00278 if ((nnoe > 0)) {
00279 if (MEDmeshEntityNameRd(fid,maa, MED_NO_DT, MED_NO_IT,
00280 MED_NODE,MED_NONE,nomnoe) < 0)
00281 inonoe = MED_FALSE;
00282 else
00283 inonoe = MED_TRUE;
00284 }
00285
00286
00287 if ((nnoe > 0)) {
00288 if (MEDmeshEntityNumberRd(fid,maa, MED_NO_DT, MED_NO_IT,
00289 MED_NODE,MED_NONE,numnoe) < 0)
00290 inunoe = MED_FALSE;
00291 else
00292 inunoe = MED_TRUE;
00293 }
00294
00295
00296 if ((nnoe > 0))
00297 if (MEDmeshEntityFamilyNumberRd(fid,maa, MED_NO_DT, MED_NO_IT,
00298 MED_NODE,MED_NONE,nufano ) < 0) {
00299 MESSAGE("Erreur a la lecture des numeros de famille des noeuds");
00300 ret = -1;
00301 }
00302
00303
00304 if (MEDfileClose(fid) < 0){
00305 MESSAGE("Erreur a la fermeture du fichier");
00306 ret = -1;
00307 }
00308
00309
00310 if (ret == 0 && nnoe > 0)
00311 {
00312 printf("Type de repere : %d \n",rep);
00313 printf("Nom des coordonnees : \n");
00314 for (i=0;i<sdim;i++)
00315 {
00316 strncpy(str,nomcoo+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00317 str[MED_SNAME_SIZE] = '\0';
00318 printf("|%s| ",str);
00319 }
00320 printf("\nUnites des coordonnees : \n");
00321 for (i=0;i<sdim;i++)
00322 {
00323 strncpy(str,unicoo+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00324 str[MED_SNAME_SIZE] = '\0';
00325 printf("|%s| ",str);
00326 }
00327 printf("\nCoordonnees des noeuds : \n");
00328 for (i=0;i<nnoe*sdim;i++)
00329 printf("%f ",*(coo2+i));
00330 if (inonoe)
00331 {
00332 printf("\nNoms des noeuds : \n");
00333 for (i=0;i<nnoe;i++)
00334 {
00335 strncpy(str,nomnoe+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00336 str[MED_SNAME_SIZE] = '\0';
00337 printf("|%s|",str);
00338 }
00339 }
00340 if (inunoe)
00341 {
00342 printf("\nNumeros des noeuds : \n");
00343 for (i=0;i<nnoe;i++)
00344 printf(IFORMAT" ",*(numnoe+i));
00345 }
00346 printf("\nNumeros des familles des noeuds : \n");
00347 for (i=0;i<nnoe;i++)
00348 printf(IFORMAT" ",*(nufano+i));
00349 printf("\n");
00350 }
00351
00352
00353 if (nnoe > 0) {
00354 free(coo1);
00355 free(coo2);
00356 free(nomnoe);
00357 free(numnoe);
00358 free(nufano);
00359 }
00360
00361 return ret;
00362 }
00363
00364
00365
00366