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  }