# 2.3.6/test5.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2011  EDF R&D, CEA/DEN
    00004  *  MED is free software: you can redistribute it and/or modify
    00005  *  it under the terms of the GNU Lesser General Public License as published by
    00006  *  the Free Software Foundation, either version 3 of the License, or
    00007  *  (at your option) any later version.
    00008  *
    00009  *  MED is distributed in the hope that it will be useful,
    00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00012  *  GNU Lesser General Public License for more details.
    00013  *
    00014  *  You should have received a copy of the GNU Lesser General Public License
    00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
    00016  */
    00017
    00018
    00019 /******************************************************************************
    00020  * - Nom du fichier : test5.c
    00021  *
    00022  * - Description : lecture des noeuds d'un maillage MED.
    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   med_err ret = 0;
    00044   med_idt fid;
    00045   /* la dimension du maillage */
    00046   med_int mdim;
    00047   /* nom du maillage de longueur maxi MED_TAILLE_NOM */
    00048   char maa[MED_TAILLE_NOM+1];
    00049   /* le nombre de noeuds */
    00050   med_int nnoe = 0;
    00051   /* table des coordonnees */
    00052   med_float *coo1,*coo2;
    00053   /* tables des noms et des unites des coordonnees
    00054      profil : (dimension*MED_TAILLE_PNOM+1) */
    00055   char nomcoo[2*MED_TAILLE_PNOM+1];
    00056   char unicoo[2*MED_TAILLE_PNOM+1];
    00057   /* tables des noms, numeros, numeros de familles des noeuds
    00058      autant d'elements que de noeuds - les noms ont pout longueur
    00059      MED_TAILLE_PNOM */
    00060   char *nomnoe;
    00061   med_int *numnoe;
    00062   med_int *nufano;
    00063   med_repere rep;
    00064   med_booleen inonoe,inunoe;
    00065   char str[MED_TAILLE_PNOM+1];
    00066   med_int i;
    00067   med_int profil[2] = { 2, 3 };
    00068   char desc[MED_TAILLE_DESC+1];
    00069   med_maillage type;
    00070
    00071   /* Ouverture du fichier "test4.med" en lecture seule */
    00072   fid = MEDouvrir("test4.med",MED_LECTURE);
    00073   if (fid < 0) {
    00074     MESSAGE("Erreur a l'ouverture du fichier test4.med");
    00075     return -1;
    00076   }
    00077
    00078   /* Lecture des infos concernant le premier maillage */
    00079   if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) {
    00080     MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
    00081     return -1;
    00082   } else
    00083     printf("Maillage de nom : %s et de dimension : %d \n",maa,mdim);
    00084
    00085   /* Combien de noeuds a lire ? */
    00086   nnoe = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0);
    00087   if (nnoe < 0) {
    00088     MESSAGE("Erreur a la lecture du nombre de noeuds dans : ");
    00089     ret = -1;
    00090   } else
    00091     printf("Nombre de noeuds : "IFORMAT" \n",nnoe);
    00092
    00093   /* Allocations memoires */
    00094   if (nnoe > 0) {
    00095     /* table des coordonnees
    00096        profil : (dimension * nombre de noeuds ) */
    00097     coo1 = (med_float*) calloc(nnoe*mdim,sizeof(med_float));
    00098     coo2 = (med_float*) calloc(nnoe*mdim,sizeof(med_float));
    00099     /* table des des numeros, des numeros de familles des noeuds
    00100        profil : (nombre de noeuds) */
    00101     numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
    00102     nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
    00103     /* table des noms des noeuds
    00104        profil : (nnoe*MED_TAILLE_PNOM+1) */
    00105     nomnoe = (char*) malloc(MED_TAILLE_PNOM*nnoe+1);
    00106   }
    00107
    00108   /* Lecture des composantes n°2 des coordonnees des noeuds */
    00109   if (nnoe > 0) {
    00110     if (MEDcoordLire(fid,maa,mdim,coo1,MED_FULL_INTERLACE,2,NULL,0,
    00111                      &rep,nomcoo,unicoo) < 0) {
    00112       MESSAGE("Erreur a la lecture des coordonnees des noeuds");
    00113       ret = -1;
    00114     } else {
    00115       printf("Valeur de coo1 : ");
    00116       for (i=0;i<nnoe*mdim;i++)
    00117         printf("%4.2f ",coo1[i]);
    00118       printf("\n");
    00119     }
    00120   }
    00121
    00122   /* Lecture des composantes n°1 des coordonnees des noeuds */
    00123   if (nnoe > 0) {
    00124     if (MEDcoordLire(fid,maa,mdim,coo1,MED_FULL_INTERLACE,1,NULL,0,
    00125                        &rep,nomcoo,unicoo) < 0) {
    00126     MESSAGE("Erreur a la lecture des coordonnees des noeuds");
    00127     ret = -1;
    00128     } else {
    00129       printf("Valeur de coo1 : ");
    00130       for (i=0;i<nnoe*mdim;i++)
    00131         printf("%4.2f ",coo1[i]);
    00132       printf("\n");
    00133     }
    00134   }
    00135
    00136   /* Lecture des composantes n°1 des coordonnees des noeuds du profil */
    00137   if (nnoe > 0) {
    00138     if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,2,profil,2,
    00139                        &rep,nomcoo,unicoo) < 0) {
    00140       MESSAGE("Erreur a la lecture des coordonnees des noeuds");
    00141       ret = -1;
    00142     } else {
    00143       printf("Valeur de coo2 : ");
    00144       for (i=0;i<nnoe*mdim;i++)
    00145         printf("%4.2f ",coo2[i]);
    00146       printf("\n");
    00147     }
    00148   }
    00149
    00150   /* Lecture des composantes n°2 des coordonnees des noeuds du profil */
    00151   if (nnoe > 0) {
    00152     if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,1,profil,2,
    00153                        &rep,nomcoo,unicoo) < 0) {
    00154       MESSAGE("Erreur a la lecture des coordonnees des noeuds");
    00155       ret = -1;
    00156     } else {
    00157       printf("Valeur de coo2 : ");
    00158       for (i=0;i<nnoe*mdim;i++) {
    00159         printf("%4.2f ",coo2[i]);
    00160         coo2[i] = 0.0;
    00161       }
    00162       printf("\n");
    00163     }
    00164   }
    00165
    00166   /* Lecture de toutes les composantes des coordonnees des noeuds du profil */
    00167   if (nnoe > 0) {
    00168     if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,MED_ALL,profil,2,
    00169                        &rep,nomcoo,unicoo) < 0) {
    00170       MESSAGE("Erreur a la lecture des coordonnees des noeuds");
    00171       ret = -1;
    00172     } else {
    00173       printf("Valeur de coo2 : ");
    00174       for (i=0;i<nnoe*mdim;i++) {
    00175         printf("%4.2f ",coo2[i]);
    00176         coo2[i] = 0.0;
    00177       }
    00178       printf("\n");
    00179     }
    00180   }
    00181
    00182   /* Lecture des composantes des coordonnees des noeuds */
    00183   if (nnoe > 0) {
    00184     if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,MED_ALL,NULL,0,
    00185                        &rep,nomcoo,unicoo) < 0) {
    00186       MESSAGE("Erreur a la lecture des coordonnees des noeuds");
    00187       ret = -1;
    00188     } else {
    00189       printf("Valeur de coo2 : ");
    00190       for (i=0;i<nnoe*mdim;i++)
    00191         printf("%4.2f ",coo2[i]);
    00192       printf("\n");
    00193     }
    00194   }
    00195
    00196   /* Lecture des noms des noeuds (optionnel dans un maillage MED) */
    00197   if ((nnoe > 0)) {
    00198     if (MEDnomLire(fid,maa,nomnoe,nnoe,MED_NOEUD,0) < 0)
    00199       inonoe = MED_FAUX;
    00200     else
    00201       inonoe = MED_VRAI;
    00202   }
    00203
    00204   /* Lecture des numeros des noeuds (optionnel dans un maillage MED) */
    00205   if ((nnoe > 0)) {
    00206     if (MEDnumLire(fid,maa,numnoe,nnoe,MED_NOEUD,0) < 0)
    00207       inunoe = MED_FAUX;
    00208     else
    00209       inunoe = MED_VRAI;
    00210   }
    00211
    00212   /* Lecture des numeros de familles des noeuds */
    00213   if ((nnoe > 0))
    00214     if (MEDfamLire(fid,maa,nufano,nnoe,MED_NOEUD,0) < 0) {
    00215       MESSAGE("Erreur a la lecture des numeros de famille des noeuds");
    00216       ret = -1;
    00217     }
    00218
    00219   /* Fermeture du fichier */
    00220   if (MEDfermer(fid) < 0){
    00221       MESSAGE("Erreur a la fermeture du fichier");
    00222       ret = -1;
    00223     }
    00224
    00225   /* Affichage des resulats */
    00226   if (ret == 0 && nnoe > 0)
    00227     {
    00228       printf("Type de repere : %d \n",rep);
    00229       printf("Nom des coordonnees : \n");
    00230       for (i=0;i<mdim;i++)
    00231         {
    00232           strncpy(str,nomcoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    00233           str[MED_TAILLE_PNOM] = '\0';
    00234           printf("%s ",str);
    00235         }
    00236       printf("\nUnites des coordonnees : \n");
    00237       for (i=0;i<mdim;i++)
    00238         {
    00239           strncpy(str,unicoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    00240           str[MED_TAILLE_PNOM] = '\0';
    00241           printf("%s ",str);
    00242         }
    00243       printf("\nCoordonnees des noeuds : \n");
    00244       for (i=0;i<nnoe*mdim;i++)
    00245         printf("%f ",*(coo2+i));
    00246       if (inonoe)
    00247         {
    00248           printf("\nNoms des noeuds : \n");
    00249           for (i=0;i<nnoe;i++)
    00250             {
    00251               strncpy(str,nomnoe+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    00252               str[MED_TAILLE_PNOM] = '\0';
    00253               printf(" %s ",str);
    00254             }
    00255         }
    00256       if (inunoe)
    00257         {
    00258           printf("\nNumeros des noeuds : \n");
    00259           for (i=0;i<nnoe;i++)
    00260               printf(IFORMAT" ",*(numnoe+i));
    00261         }
    00262       printf("\nNumeros des familles des noeuds : \n");
    00263       for (i=0;i<nnoe;i++)
    00264         printf(IFORMAT" ",*(nufano+i));
    00265       printf("\n");
    00266     }
    00267
    00268   /* liberation memoire */
    00269   if (nnoe > 0) {
    00270     free(coo1);
    00271     free(coo2);
    00272     free(nomnoe);
    00273     free(numnoe);
    00274     free(nufano);
    00275   }
    00276
    00277   return ret;
    00278 }
    00279
    00280
    00281
    00282