      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 : test17.c
     21   *
     22   * - Description : lecture d'elements de maillages MED ecrits par test16
     23   *                 via les routines de niveau 2
     24   *                 - equivalent a test7.c
     25   *
     26   *****************************************************************************/
     27
     28  #include <med.h>
     29  #include <med_utils.h>
     30  #include <stdio.h>
     31  #include <string.h>
     32  #include <stdlib.h>
     33
     34  int main (int argc, char **argv)
     35  {
     36    med_err ret = 0;
     37    med_idt fid;
     38    med_int nse2;
     39    med_int *se2;
     40    char *nomse2;
     41    med_int *numse2;
     42    med_int *nufase2;
     43    med_int ntr3;
     44    med_int *tr3;
     45    char *nomtr3;
     46    med_int *numtr3;
     47    med_int *nufatr3;
     48    char maa[MED_TAILLE_NOM+1] ="maa1";
     49    med_int mdim;
     50    med_booleen inoele1,inoele2,inuele1,inuele2;
     51    med_int tse2,ttr3;
     52    med_int i;
     53    char str[MED_TAILLE_PNOM+1];
     54    char desc[MED_TAILLE_DESC+1];
     55    med_maillage type;
     56
     57    /* Ouverture du fichier test16.med en lecture seule */
     58    if ((fid = MEDouvrir("test16.med",MED_LECTURE)) < 0) {
     59      MESSAGE("Erreur a l'ouverture du fichier test16.med");
     60      return -1;
     61    }
     62
     63    /* Lecture des infos sur le 1er maillage */
     64    if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) {
     65      MESSAGE("Erreur a la lecture des infos sur le 1er maillage");
     66      return -1;
     67    }
     68    printf("Maillage de nom : %s et de dimension %d \n",maa,mdim);
     69
     70    /* Lecture du nombre de triangle et de segment */
     71    if ((nse2 = MEDnEntMaa(fid,maa,MED_CONN,MED_ARETE,MED_SEG2,MED_DESC)) < 0) {
     72      MESSAGE("Erreur a la lecture du nombre de segments ");
     73      return -1;
     74    }
     75    if ((ntr3 = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_TRIA3,MED_DESC))<0) {
     76      MESSAGE("Erreur a la lecture du nombre de triangles ");
     77      return -1;
     78    }
     79    printf("Nombre de MED_SEG2 : %d - nombre de MED_TRIA3 : %d\n",nse2,ntr3);
     80
     81    /* Allocations memoire */
     82    tse2 = 2;
     83    se2  = (med_int*) malloc(sizeof(med_int)*tse2*nse2);
     84    nomse2 = (char*) malloc(MED_TAILLE_PNOM*nse2+1);
     85    numse2 = (med_int*) malloc(sizeof(med_int)*nse2);
     86    nufase2 = (med_int*) malloc(sizeof(med_int)*nse2);
     87
     88    ttr3 = 3;
     89    tr3 = (med_int*) malloc(sizeof(med_int)*ntr3*ttr3);
     90    nomtr3 = (char*) malloc(MED_TAILLE_PNOM*ntr3+1);
     91    numtr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
     92    nufatr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
     93
     94    /* Lecture des aretes segments MED_SEG2 :
     95       - Connectivite,
     96       - Noms (optionnel)
     97       - Numeros (optionnel)
     98       - Numeros de familles */
     99    if (MEDelementsLire(fid,maa,mdim,se2,MED_NO_INTERLACE,nomse2,&inoele1,numse2,&inuele1,
    100                nufase2,nse2,MED_ARETE,MED_SEG2,MED_DESC) < 0) {
    101      MESSAGE("Erreur a la lecture des segments");
    102      ret = -1;
    103    }
    104
    105    /* Lecture des mailles triangles MED_TRIA3 :
    106       - Connectivite,
    107       - Noms (optionnel)
    108       - Numeros (optionnel)
    109       - Numeros de familles */
    110    if (MEDelementsLire(fid,maa,mdim,tr3,MED_NO_INTERLACE,nomtr3,&inoele2,numtr3,&inuele2,
    111                nufatr3,ntr3,MED_MAILLE,MED_TRIA3,MED_DESC) < 0) {
    112      MESSAGE("Erreur a la lecture des triangles");
    113      ret = -1;
    114    }
    115
    116    /* Fermeture du fichier */
    117    if (MEDfermer(fid) < 0) {
    118      MESSAGE("Erreur a la fermeture du fichier");
    119      ret = -1;
    120    }
    121
    122    /* Affichage */
    123    if (ret == 0) {
    124      if (nse2 > 0) {
    125        printf("Connectivite des segments : \n");
    126        for (i=0;i<nse2*tse2;i++)
    127      printf("%d ",*(se2+i));
    128        if (inoele1) {
    129      printf("\nNoms des segments :\n");
    130      for (i=0;i<nse2;i++) {
    131        strncpy(str,nomse2+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    132        str[MED_TAILLE_PNOM] = '\0';
    133        printf("%s ",str);
    134      }
    135        }
    136        if (inuele1) {
    137      printf("\nNumeros des segments :\n");
    138      for (i=0;i<nse2;i++)
    139        printf("%d ",*(numse2+i));
    140        }
    141        printf("\nNumeros des familles des segments :\n");
    142        for (i=0;i<nse2;i++)
    143      printf("%d ",*(nufase2+i));
    144      }
    145
    146      if (ntr3 > 0) {
    147        printf("\nConnectivite des triangles : \n");
    148        for (i=0;i<ntr3*ttr3;i++)
    149      printf("%d ",*(tr3+i));
    150        if (inoele2) {
    151      printf("\nNoms des triangles :\n");
    152      for (i=0;i<ntr3;i++) {
    153        strncpy(str,nomtr3+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    154        str[MED_TAILLE_PNOM] = '\0';
    155        printf("%s ",str);
    156      }
    157        }
    158        if (inuele2) {
    159      printf("\nNumeros des triangles :\n");
    160      for (i=0;i<ntr3;i++)
    161        printf("%d ",*(numtr3+i));
    162        }
    163        printf("\nNumeros des familles des triangles :\n");
    164        for (i=0;i<ntr3;i++)
    165      printf("%d ",*(nufatr3+i));
    166
    167        printf("\n");
    168      }
    169    }
    170
    171    /* Nettoyage memoire */
    172    free(se2);
    173    free(nomse2);
    174    free(numse2);
    175    free(nufase2);
    176
    177    free(tr3);
    178    free(nomtr3);
    179    free(numtr3);
    180    free(nufatr3);
    181
    182    return ret;
    183  }
    184
    185
    186
    187