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   med_int mdim=0,sdim=0;
00046   char    maa[MED_NAME_SIZE+1]="";
00047   med_int nnoe = 0;
00048   med_int ntrsf = 0;
00049   med_float *coo1;
00050   med_float mtrsf[7]={ 0, 0, 0, 0, 0, 0, 0};
00051   
00052 
00053   char nomcoo[2*MED_SNAME_SIZE+1];
00054   char unicoo[2*MED_SNAME_SIZE+1];
00055   
00056 
00057 
00058   char *nomnoe;
00059   med_int *numnoe, *nufano;
00060   med_axis_type rep;
00061   med_int  nnomnoe=0,nnumnoe=0,nnufano=0;
00062   med_bool inonoe=MED_FALSE,inunoe=MED_FALSE,inufano=MED_FALSE;
00063   med_bool chgt=MED_FALSE,trsf=MED_FALSE;
00064   med_bool chgtco=MED_FALSE,trsfdataset=MED_FALSE;
00065   char desc[MED_COMMENT_SIZE+1]="";
00066   char dtunit[MED_SNAME_SIZE+1]="";
00067   char str[MED_SNAME_SIZE+1]="";
00068   med_mesh_type type;
00069   med_sorting_type sort;
00070   med_int nstep=0,i=0;
00071   med_int numit=MED_NO_IT,numdt=MED_NO_DT;
00072   med_float dt=0.0;
00073   int csit=0;
00074 
00075   
00076   fid = MEDfileOpen("Test_MEDmeshNodeCoordinateTrsfWr.med",MED_ACC_RDONLY);
00077   if (fid < 0) {
00078     MESSAGE("Erreur a l'ouverture du fichier Test_MEDmeshNodeCoordinateTrsfWr.med");
00079     return -1;
00080   }
00081 
00082   if ((sdim=MEDmeshnAxis(fid, 1)) <0) {
00083     MESSAGE("Erreur a la lecture de la dimension de l'espace du maillage :");
00084     SSCRUTE(maa);
00085     ret = -1;
00086   }
00087 
00088   
00089   if ( MEDmeshInfo( fid, 1,  maa,  &sdim, &mdim, &type, desc, dtunit, &sort,
00090                     &nstep,  &rep, nomcoo,unicoo) < 0 ) {
00091     MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
00092     return -1;
00093   } else {
00094     printf("Maillage de nom : |%s| , de dimension : %d , et de type %d\n",maa,mdim,type);
00095     printf("\t -Dimension de l'espace : %d\n",sdim);
00096     printf("\t -Description du maillage : %s\n",desc);
00097     printf("\t -Noms des axes : %s\n",nomcoo);
00098     printf("\t -Unités des axes : %s\n",unicoo);
00099     printf("\t -Type de repère : %d\n",rep);
00100     printf("\t -Nombre d'étape de calcul : %d\n",nstep);
00101     printf("\t -Unité des dates : %s\n",dtunit);
00102   }
00103 
00104   for (csit=0; csit <nstep; ++csit) {
00105 
00106     if ( MEDmeshComputationStepInfo(fid, maa, csit+1, &numdt, &numit, &dt ) < 0) {
00107       MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
00108       ret = -1;
00109       continue;
00110     }
00111     if (sort == MED_SORT_DTIT )
00112       printf("\n -Etape de calcul n° %d : (%d,%d) avec dt=%f %s\n\n",csit+1,numdt,numit,dt,dtunit);
00113     else
00114       printf("\n -Etape de calcul n° %d : (%d,%d) avec dt=%f %s\n\n",csit+1,numit,numdt,dt,dtunit);
00115 
00116     
00117     nnoe = MEDmeshnEntity(fid,maa,numdt,numit,
00118                           MED_NODE,MED_NONE,MED_COORDINATE,MED_NODAL, &chgt,&trsf);
00119     if (nnoe < 0) {
00120       MESSAGE("Erreur a la lecture du nombre de noeuds.");
00121       ret = -1;
00122     } else
00123       printf("Nombre de noeuds : "IFORMAT", (chgt,trsf) : (%1d,%1d) \n",nnoe,chgt,trsf);
00124 
00125     if ( !chgt )
00126       printf("Aucun changement par rapport à la séquence de calcul précédente.\n");
00127 
00128     if ( chgt && trsf ) {
00129       printf("Seules les coordonnées sont modifiées par rapport à la séquence de calcul précédente.\n");
00130       chgtco=MED_TRUE;
00131     } else {
00132       chgtco=MED_FALSE;
00133     }
00134     trsfdataset=MED_FALSE;
00135     if ( chgt && !trsf ) {
00136 
00137       printf("Des modifications ont eu lieu depuis la séquence de calcul précédente.\n");
00138       ntrsf = MEDmeshnEntity(fid,maa,numdt,numit,
00139                              MED_NODE,MED_NONE,MED_COORDINATE_TRSF,MED_NODAL, &chgtco, &trsfdataset);
00140       if (ntrsf < 0)  {
00141         MESSAGE("Erreur a la lecture de la présence d'une transformation géométrique : ");
00142         ret=-1;
00143       }
00144       if (chgtco)
00145         printf("Les coordonnées sont modifiées par rapport à la séquence de calcul précédente.\n");
00146       else
00147         printf("Les coordonnées ne sont pas modifiées par rapport à la séquence de calcul précédente.\n");
00148 
00149       if (trsfdataset)
00150         printf("Une modification de la matrice de transformation a eu lieu par rapport à la séquence de calcul précédente.\n");
00151     }
00152 
00153     
00154     if (nnoe > 0) {
00155       if (chgtco) {
00156         coo1 = (med_float*) calloc(nnoe*sdim,sizeof(med_float));
00157         if ( MEDmeshNodeCoordinateRd(fid, maa, numdt, numit,MED_FULL_INTERLACE, coo1) < 0 ) {
00158           MESSAGE("Erreur a la lecture des coordonnees des noeuds");
00159           ret = -1;
00160         }
00161       }
00162 
00163     
00164       nnomnoe = MEDmeshnEntity(fid,maa,numdt,numit,
00165                                MED_NODE,MED_NONE,MED_NAME,MED_NODAL, &chgtco, &inonoe);
00166       if ( (nnomnoe>0) && inonoe) {
00167         nomnoe = (char*) malloc(MED_SNAME_SIZE*nnomnoe+1);
00168         if (MEDmeshEntityNameRd(fid,maa, numdt, numit, MED_NODE,MED_NONE,nomnoe) < 0) {
00169           MESSAGE("Erreur a la lecture des noms des noeuds");
00170           ret = -1;
00171         }
00172       }
00173 
00174     
00175       nnumnoe = MEDmeshnEntity(fid,maa,numdt,numit,
00176                                MED_NODE,MED_NONE,MED_NUMBER,MED_NODAL, &chgtco, &inunoe);
00177       if ( (nnumnoe>0) && inunoe) {
00178         numnoe = (med_int*) malloc(sizeof(med_int)*nnumnoe);
00179         if (MEDmeshEntityNumberRd(fid,maa, numdt, numit, MED_NODE,MED_NONE,numnoe) < 0) {
00180           MESSAGE("Erreur a la lecture des numéros des noeuds");
00181           ret = -1;
00182         }
00183       }
00184 
00185     
00186       nnufano = MEDmeshnEntity(fid,maa,numdt,numit,
00187                                MED_NODE,MED_NONE,MED_FAMILY_NUMBER,MED_NODAL, &chgtco, &inufano);
00188       if ( (nnufano>0) && inufano) {
00189         nufano = (med_int*) malloc(sizeof(med_int)*nnufano);
00190         if (MEDmeshEntityFamilyNumberRd(fid,maa, numdt, numit,MED_NODE,MED_NONE,nufano ) < 0) {
00191           MESSAGE("Erreur a la lecture des numeros de famille des noeuds");
00192           ret = -1;
00193         }
00194       }
00195     }
00196 
00197     
00198     if (ret == 0 && nnoe > 0) {
00199 
00200       if (chgtco) {
00201         printf("\n\tCoordonnees des noeuds : \n\t");
00202         for (i=0;i<nnoe*sdim;i++)
00203           printf("%f ",*(coo1+i));
00204       }
00205 
00206       if (trsfdataset)
00207         if ( MEDmeshNodeCoordinateTrsfRd(fid, maa, numdt, numit, mtrsf) < 0 ) {
00208           MESSAGE("Erreur a la lecture de la matrice de transformation");
00209           ret = -1;
00210         } else {
00211           printf("Valeur de la matrice de transformation : ");
00212           for (i=0;i<7;i++)
00213             printf("%4.2f ",mtrsf[i]);
00214           printf("\n\n");
00215         }
00216 
00217       if (inonoe) {
00218         printf("\n\tNoms des noeuds : \n\t");
00219         for (i=0;i<nnoe;i++) {
00220           strncpy(str,nomnoe+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
00221           str[MED_SNAME_SIZE] = '\0';
00222           printf("|%s|",str);
00223         }
00224       }
00225       if (inunoe) {
00226         printf("\n\tNumeros des noeuds : \n\t");
00227         for (i=0;i<nnoe;i++)
00228           printf(IFORMAT" ",*(numnoe+i));
00229       }
00230       if (inufano) {
00231         printf("\n\tNumeros des familles des noeuds : \n\t");
00232         for (i=0;i<nnoe;i++)
00233           printf(IFORMAT" ",*(nufano+i));
00234         printf("\n");
00235       }
00236     }
00237 
00238     
00239     if (nnoe > 0) {
00240       if (chgtco)  free(coo1);
00241       if (inonoe)  free(nomnoe);
00242       if (inunoe)  free(numnoe);
00243       if (inufano) free(nufano);
00244     }
00245   }
00246 
00247   
00248   if (MEDfileClose(fid) < 0){
00249     MESSAGE("Erreur a la fermeture du fichier");
00250     ret = -1;
00251   }
00252 
00253   return ret;
00254 }
00255 
00256 
00257 
00258