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 }