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 maximun 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 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 2,
00140 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00141 MED_NO_PROFILE, MED_UNDEF_SIZE,
00142 NULL, &filter) < 0 ) {
00143 MESSAGE("Erreur à la création du filtre 1.");
00144 }
00145
00146
00147 if (nnoe > 0) {
00148 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00149 &filter, coo1) < 0 ) {
00150 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00151 ret = -1;
00152 } else {
00153 printf("Valeur de coo1 : ");
00154 for (i=0;i<nnoe*sdim;i++)
00155 printf("%4.2f ",coo1[i]);
00156 printf("\n");
00157 }
00158 }
00159
00160 MEDfilterClose(&filter);
00161 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 1,
00162 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00163 MED_NO_PROFILE, MED_UNDEF_SIZE,
00164 NULL, &filter) < 0 ) {
00165 MESSAGE("Erreur à la création du filtre 2.");
00166 }
00167
00168
00169
00170 if (nnoe > 0) {
00171 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00172 &filter, coo1) < 0 ) {
00173 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00174 ret = -1;
00175 } else {
00176 printf("Valeur de coo1 : ");
00177 for (i=0;i<nnoe*sdim;i++)
00178 printf("%4.2f ",coo1[i]);
00179 printf("\n");
00180 }
00181 }
00182
00183 MEDfilterClose(&filter);
00184 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 1,
00185 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00186 MED_NO_PROFILE, 2,
00187 flt, &filter) < 0 ) {
00188 MESSAGE("Erreur à la création du filtre 3.");
00189 }
00190
00191
00192 if (nnoe > 0) {
00193 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00194 &filter, coo2) < 0 ) {
00195 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00196 ret = -1;
00197 } else {
00198 printf("Valeur de coo2 : ");
00199 for (i=0;i<nnoe*sdim;i++)
00200 printf("%4.2f ",coo2[i]);
00201 printf("\n");
00202 }
00203 }
00204
00205 MEDfilterClose(&filter);
00206 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, 2,
00207 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00208 MED_NO_PROFILE, 2,
00209 flt, &filter) < 0 ) {
00210 MESSAGE("Erreur à la création du filtre 4.");
00211 }
00212
00213
00214 if (nnoe > 0) {
00215 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00216 &filter, coo2) < 0 ) {
00217 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00218 ret = -1;
00219 } else {
00220 printf("Valeur de coo2 : ");
00221 for (i=0;i<nnoe*sdim;i++) {
00222 printf("%4.2f ",coo2[i]);
00223 coo2[i] = 0.0;
00224 }
00225 printf("\n");
00226 }
00227 }
00228
00229 MEDfilterClose(&filter);
00230 if ( MEDfilterEntityCr( fid, nnoe, 1, sdim, MED_ALL_CONSTITUENT,
00231 MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE,
00232 MED_NO_PROFILE, 2,
00233 flt, &filter) < 0 ) {
00234 MESSAGE("Erreur à la création du filtre 5.");
00235 }
00236
00237
00238 if (nnoe > 0) {
00239 if ( MEDmeshNodeCoordinateAdvancedRd(fid, maa, MED_NO_DT, MED_NO_IT,
00240 &filter, coo2) < 0 ) {
00241 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00242 ret = -1;
00243 } else {
00244 printf("Valeur de coo2 : ");
00245 for (i=0;i<nnoe*sdim;i++) {
00246 printf("%4.2f ",coo2[i]);
00247 coo2[i] = 0.0;
00248 }
00249 printf("\n");
00250 }
00251 }
00252 MEDfilterClose(&filter);
00253
00254
00255 if (nnoe > 0) {
00256 if ( MEDmeshNodeCoordinateRd(fid, maa, MED_NO_DT, MED_NO_IT,
00257 MED_FULL_INTERLACE, coo2) < 0 ) {
00258 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00259 ret = -1;
00260 } else {
00261 printf("Valeur de coo2 : ");
00262 for (i=0;i<nnoe*sdim;i++)
00263 printf("%4.2f ",coo2[i]);
00264 printf("\n");
00265 }
00266 }
00267
00268
00269 if ((nnoe > 0)) {
00270 if (MEDmeshEntityNameRd(fid,maa, MED_NO_DT, MED_NO_IT,
00271 MED_NODE,MED_NONE,nomnoe) < 0)
00272 inonoe = MED_FALSE;
00273 else
00274 inonoe = MED_TRUE;
00275 }
00276
00277
00278 if ((nnoe > 0)) {
00279 if (MEDmeshEntityNumberRd(fid,maa, MED_NO_DT, MED_NO_IT,
00280 MED_NODE,MED_NONE,numnoe) < 0)
00281 inunoe = MED_FALSE;
00282 else
00283 inunoe = MED_TRUE;
00284 }
00285
00286
00287 if ((nnoe > 0))
00288 if (MEDmeshEntityFamilyNumberRd(fid,maa, MED_NO_DT, MED_NO_IT,
00289 MED_NODE,MED_NONE,nufano ) < 0) {
00290 MESSAGE("Erreur a la lecture des numeros de famille des noeuds");
00291 ret = -1;
00292 }
00293
00294
00295 if (MEDfileClose(fid) < 0){
00296 MESSAGE("Erreur a la fermeture du fichier");
00297 ret = -1;
00298 }
00299
00300
00301 if (ret == 0 && nnoe > 0)
00302 {
00303 printf("Type de repere : %d \n",rep);
00304 printf("Nom des coordonnees : \n");
00305 for (i=0;i<sdim;i++)
00306 {
00307 strncpy(str,nomcoo+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00308 str[MED_SNAME_SIZE] = '\0';
00309 printf("|%s| ",str);
00310 }
00311 printf("\nUnites des coordonnees : \n");
00312 for (i=0;i<sdim;i++)
00313 {
00314 strncpy(str,unicoo+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00315 str[MED_SNAME_SIZE] = '\0';
00316 printf("|%s| ",str);
00317 }
00318 printf("\nCoordonnees des noeuds : \n");
00319 for (i=0;i<nnoe*sdim;i++)
00320 printf("%f ",*(coo2+i));
00321 if (inonoe)
00322 {
00323 printf("\nNoms des noeuds : \n");
00324 for (i=0;i<nnoe;i++)
00325 {
00326 strncpy(str,nomnoe+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00327 str[MED_SNAME_SIZE] = '\0';
00328 printf("|%s|",str);
00329 }
00330 }
00331 if (inunoe)
00332 {
00333 printf("\nNumeros des noeuds : \n");
00334 for (i=0;i<nnoe;i++)
00335 printf(IFORMAT" ",*(numnoe+i));
00336 }
00337 printf("\nNumeros des familles des noeuds : \n");
00338 for (i=0;i<nnoe;i++)
00339 printf(IFORMAT" ",*(nufano+i));
00340 printf("\n");
00341 }
00342
00343
00344 if (nnoe > 0) {
00345 free(coo1);
00346 free(coo2);
00347 free(nomnoe);
00348 free(numnoe);
00349 free(nufano);
00350 }
00351
00352 return ret;
00353 }
00354
00355
00356
00357