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 }