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