      1  /*************************************************************************
      2  * COPYRIGHT (C) 1999 - 2003  EDF R&D
      3  * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
      4  * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE
      5  * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
      6  * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
      7  *
      8  * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
      9  * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
     10  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
     11  * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
     12  *
     13  * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
     14  * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
     15  * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
     16  *
     17  *************************************************************************/
     18
     19  /******************************************************************************
     20   * - Nom du fichier : test15.c
     21   *
     22   * - Description : lecture des noeuds d'un maillage MED
     23   *                 a l'aide des routines de niveau 2
     24   *                 - equivalent a test5.c
     25   *
     26   *****************************************************************************/
     27
     28  #include <med.h>
     29  #include <med_utils.h>
     30  #include <string.h>
     31  #include <stdlib.h>
     32
     33
     34  int main (int argc, char **argv)
     35  {
     36    med_err ret = 0;
     37    med_idt fid;
     38    /* la dimension du maillage */
     39    med_int mdim;
     40    /* nom du maillage de longueur maxi MED_TAILLE_NOM */
     41    char maa[MED_TAILLE_NOM+1];
     42    /* le nombre de noeuds */
     43    med_int nnoe = 0;
     44    /* table des coordonnees */
     45    med_float *coo;
     46    /* tables des noms et des unites des coordonnees
     47       profil : (dimension*MED_TAILLE_PNOM+1) */
     48    char nomcoo[3*MED_TAILLE_PNOM+1];
     49    char unicoo[3*MED_TAILLE_PNOM+1];
     50    /* tables des noms, numeros, numeros de familles des noeuds
     51       autant d'elements que de noeuds - les noms ont pout longueur
     52       MED_TAILLE_PNOM */
     53    char *nomnoe;
     54    med_int *numnoe;
     55    med_int *nufano;
     56    med_repere rep;
     57    med_booleen inonoe,inunoe;
     58    char str[MED_TAILLE_PNOM+1];
     59    med_int i;
     60    char desc[MED_TAILLE_DESC+1];
     61    med_maillage type;
     62
     63    /* Ouverture du fichier passe en argument en lecture seule */
     64    if ((fid= MEDouvrir(argv[1],MED_LECTURE)) < 0) {
     65      MESSAGE("Erreur a l'ouverture du fichier :");
     66      SSCRUTE(argv[1]);
     67      return -1;
     68    }
     69
     70    /* Lecture des infos concernant le premier maillage */
     71    if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) {
     72      MESSAGE("Erreur a la lecture des informations du 1er maillage");
     73      return -1;
     74    }
     75    printf("Maillage de nom : %s et de dimension : %d \n",maa,mdim);
     76
     77    /* Lecture du nombre de noeuds */
     78    if ((nnoe = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0)) < 0) {
     79      MESSAGE("Erreur a la lecture du nombre de noeuds ");
     80      return -1;
     81    }
     82    printf("Nombre de noeuds : %d \n",nnoe);
     83
     84    /* Allocations memoires */
     85    /* table des coordonnees
     86       profil : (dimension * nombre de noeuds ) */
     87    if (nnoe > 0) {
     88      coo = (med_float*) malloc(sizeof(med_float)*nnoe*mdim);
     89      /* table des des numeros, des numeros de familles des noeuds
     90         profil : (nombre de noeuds) */
     91      numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
     92      nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
     93      /* table des noms des noeuds
     94         profil : (nnoe*MED_TAILLE_PNOM+1) */
     95      nomnoe = (char*) malloc(MED_TAILLE_PNOM*nnoe+1);
     96
     97      /* Lecture des noeuds :
     98         - Coordonnees
     99         - Noms (optionnel dans un fichier MED)
    100         - Numeros (optionnel dans un fichier MED)
    101         - Numeros de familles    */
    102      if (MEDnoeudsLire(fid,maa,mdim,coo,MED_FULL_INTERLACE,&rep,nomcoo,unicoo,
    103                nomnoe,&inonoe,numnoe,&inunoe,nufano,nnoe) < 0) {
    104        MESSAGE("Erreur a la lecture des noeuds du maillage");
    105        ret = -1;
    106      }
    107
    108      /* Affichage */
    109      if (ret == 0) {
    110        printf("Type de repere : %d \n",rep);
    111        printf("Nom des coordonnees : \n");
    112        for (i=0;i<mdim;i++) {
    113      strncpy(str,nomcoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    114      str[MED_TAILLE_PNOM] = '\0';
    115      printf("%s ",str);
    116        }
    117        printf("\nUnites des coordonnees : \n");
    118        for (i=0;i<mdim;i++) {
    119      strncpy(str,unicoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    120      str[MED_TAILLE_PNOM] = '\0';
    121      printf("%s ",str);
    122        }
    123        printf("\nCoordonnees des noeuds : \n");
    124        for (i=0;i<nnoe*mdim;i++)
    125      printf("%f ",*(coo+i));
    126        if (inonoe) {
    127      printf("\nNoms des noeuds : \n");
    128      for (i=0;i<nnoe;i++) {
    129        strncpy(str,nomnoe+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    130        str[MED_TAILLE_PNOM] = '\0';
    131        printf(" %s ",str);
    132      }
    133        }
    134        if (inunoe) {
    135      printf("\nNumeros des noeuds : \n");
    136      for (i=0;i<nnoe;i++)
    137        printf("%d ",*(numnoe+i));
    138        }
    139        printf("\nNumeros des familles des noeuds : \n");
    140        for (i=0;i<nnoe;i++)
    141      printf("%d ",*(nufano+i));
    142        printf("\n");
    143      }
    144
    145      /* Liberation memoire */
    146      free(coo);
    147      free(nomnoe);
    148      free(numnoe);
    149      free(nufano);
    150    }
    151
    152    /* Fermeture du fichier */
    153    if (MEDfermer(fid) < 0) {
    154      MESSAGE("Erreur a la fermeture du fichier");
    155      return -1;
    156    }
    157
    158    return ret;
    159  }
    160
    161
    162
    163