      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 : test20.c
     21   *
     22   * - Description : montage/demontage de fichiers MED
     23   *
     24   *****************************************************************************/
     25
     26  #include <med.h>
     27  #include <med_utils.h>
     28  #include <stdio.h>
     29
     30  int main()
     31  {
     32    int i;
     33    med_idt fid,mid,mid2;
     34    med_int ncha, ncomp, nmaa;
     35    med_type_champ type;
     36    char comp[3*MED_TAILLE_PNOM+1],unit[3*MED_TAILLE_PNOM+1];
     37    char nom[MED_TAILLE_NOM+1];
     38
     39    /* Ouverture du fichier test2.med en mode lecture et ajout */
     40    if ((fid = MEDouvrir("test2.med",MED_LECTURE_AJOUT)) < 0) {
     41      MESSAGE("Erreur a l'ouverture du fichier test2.med");
     42      return -1;
     43    }
     44    printf("On ouvre le fichier test2.med \n");
     45
     46    /* Lecture du nombre de champs */
     47    if ((ncha = MEDnChamp(fid,0)) < 0) {
     48      MESSAGE("Erreur a la lecture du nombre de champs");
     49      return -1;
     50    }
     51    printf("Nombre de champs dans test2.med : %d \n",ncha);
     52
     53    /* On fait le montage dans test2.med de tous les champs de test10.med */
     54    mid = MEDmonter(fid,"test10.med",MED_CHAMP);
     55    if (mid < 0) {
     56      MESSAGE("Echec du montage des champs de test10.med");
     57      return -1;
     58    }
     59    printf("On monte les champs du fichier test10.med dans le fichier test2.med \n");
     60
     61    /* Combien de champs dans le fichier "test2.med" apres le montage */
     62    if ((ncha = MEDnChamp(fid,0)) < 0) {
     63      MESSAGE("Erreur a la lecture du nombre de champ");
     64      return -1;
     65    }
     66    printf("Nombre de champs dans test2.med apres montage : %d \n",ncha);
     67
     68    /* On s'assure que les champs sont bien accessibles */
     69    for (i=1;i<=ncha;i++) {
     70
     71      /* Combien de composantes dans le champ */
     72      if ((ncomp = MEDnChamp(fid,i)) < 0) {
     73        MESSAGE("Erreur a lecture du nombre de composante du champ");
     74        return -1;
     75      }
     76
     77      /* Lecture des infos sur le champ */
     78      if (MEDchampInfo(fid,i,nom,&type,comp,unit,ncomp) < 0) {
     79        MESSAGE("Erreur a la lecture des informations sur le champ");
     80        return -1;
     81      }
     82
     83      printf("Champ de nom [%s] de type %d et avec %d composantes \n",nom,type,ncomp);
     84    }
     85
     86    /* On demonte le fichier */
     87    if (MEDdemonter(fid,mid,MED_CHAMP) < 0) {
     88      MESSAGE("Echec du demontage de test10.med");
     89      return -1;
     90    }
     91    printf("On demonte le fichier test10.med dans test2.med\n");
     92
     93    /* Combien de champs dans le fichier "test2.med" apres le demontage */
     94    if ((ncha = MEDnChamp(fid,0)) < 0) {
     95      MESSAGE("Erreur a la lecture du nombre de champ");
     96      return -1;
     97    }
     98    printf("Nombre de champs dans test2.med apres demontage: %d \n",ncha);
     99
    100    /* On ferme le fichier test2.med */
    101    if (MEDfermer(fid) < 0) {
    102      MESSAGE("Erreur lors de la fermeture du fichier");
    103      return -1;
    104    }
    105    printf("On ferme le fichier test2.med \n");
    106
    107    /* Creation du fichier test20.med */
    108    if ((fid = MEDouvrir("test20.med",MED_CREATION))  < 0) {
    109      MESSAGE("Erreur a la creation du fichier test20.med");
    110      return -1;
    111    }
    112    printf("On cree le fichier test20.med \n");
    113
    114    /* Montage dans test20.med de tous les maillages de test2.med */
    115    mid2 = MEDmonter(fid,"test2.med",MED_MAILLAGE);
    116    if (mid2 < 0) {
    117      MESSAGE("Echec du montage de test2.med");
    118      return -1;
    119    }
    120    printf("On monte les maillages du fichier test2.med dans le fichier test20.med \n");
    121
    122    /* Lecture du nombre de maillages */
    123    nmaa = MEDnMaa(fid);
    124    if (nmaa < 0) {
    125      MESSAGE("Erreur lors de la lecture du nombre de maillage");
    126      return -1;
    127    }
    128    printf("Nombre de maillages apres montage de test2.med : %d\n",nmaa);
    129
    130    /* Montage dans test20.med de tous les champs de test10.med */
    131    mid = MEDmonter(fid,"test10.med",MED_CHAMP);
    132    if (mid < 0) {
    133      MESSAGE("Echec du montage de test10.med");
    134      return -1;
    135    }
    136    printf("On monte les champs du fichier test10.med dans le fichier test20.med \n");
    137
    138    /* Combien de champs dans le fichier "test20.med" apres le montage */
    139    if ((ncha = MEDnChamp(fid,0)) < 0) {
    140      MESSAGE("Erreur lors de la lecture du nombre de champ");
    141      return -1;
    142    }
    143    printf("Nombre de champs dans test20.med apres montage : %d \n",ncha);
    144
    145    /* Demontage du fichier test10.med */
    146    if (MEDdemonter(fid,mid,MED_CHAMP) < 0) {
    147      MESSAGE("Echec du demontage de test10.med");
    148      return -1;
    149    }
    150    printf("On demonte le fichier test10.med dans test20.med \n");
    151
    152    /* Demontage du fichier test2.med */
    153    if (MEDdemonter(fid,mid2,MED_MAILLAGE) < 0) {
    154      MESSAGE("Echec du demontage de test2.med");
    155      return -1;
    156    }
    157    printf("On demonte le fichier test2.med dans test20.med\n");
    158
    159    /* Fermeture du fichier test20.med */
    160    if (MEDfermer(fid) < 0) {
    161      MESSAGE("Erreur de la fermeture du fichier");
    162      return -1;
    163    }
    164    printf("On ferme le fichier test20.med \n");
    165
    166    return 0;
    167  }