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 : test30.c
21 *
22 * - Description : lecture des joints d'un maillage 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 afficheCorres(med_idt fid, char *maa, char *jnt,
39 med_entite_maillage typ_ent_local, med_geometrie_element typ_geo_local,
40 med_entite_maillage typ_ent_distant, med_geometrie_element typ_geo_distant,
41 char *type);
42
43 int main (int argc, char **argv)
44
45
46 {
47 med_err ret = 0;
48 med_idt fid;
49 char maa[MED_TAILLE_NOM+1],maa_dist[MED_TAILLE_NOM+1];
50 med_int mdim;
51 med_int njnt,ncor,ndom,nc;
52 char jnt[MED_TAILLE_NOM+1],corr[MED_TAILLE_NOM+1];
53 char des[MED_TAILLE_DESC+1];
54 med_entite_maillage typ_ent_local,typ_ent_distant;
55 med_geometrie_element typ_geo_local,typ_geo_distant;
56
57 int i,j,k;
58 med_maillage type;
59
60 if (argc != 2) {
61 MESSAGE("Il faut passer un fichier MED en paramètre");
62 return -1;
63 }
64
65 /* Ouverture du fichier passe en argument en lecture seule */
66 if ((fid = MEDouvrir(argv[1],MED_LECTURE)) < 0) {
67 MESSAGE("Erreur a l'ouverture du fichier : "); SSCRUTE(argv[1]);
68 return -1;
69 }
70
71 /* Lecture des infos sur le premier maillage */
72 if (MEDmaaInfo(fid,1,maa,&mdim,&type,des) < 0) {
73 MESSAGE("Erreur a lecture des infos sur le 1er maillage");
74 return -1;
75 }
76 printf("Maillage de nom %s et de dimension %d \n",maa,mdim);
77
78 /* Lecture du nombre de joints */
79 if ((njnt = MEDnJoint(fid,maa)) < 0) {
80 MESSAGE("Erreur a la lecture du nombre de joints");
81 return -1;
82 }
83 printf("Nombre de joints : %d \n",njnt);
84
85 /* Lecture de tous les joints du maillage */
86 if (njnt > 0)
87 for (i = 0;i<njnt;i++) {
88 printf("Joint numero : %d \n",i+1);
89
90 /* Lecture des infos sur le joints */
91 if (MEDjointInfo(fid,maa,i+1,jnt,des,&ndom,maa_dist) < 0) {
92 MESSAGE("Erreur a la lecture du joint d'indice");
93 ISCRUTE(i+1);
94 return -1;
95 }
96 printf("Nom du joint: %s \n",jnt);
97 printf("Description du joint : %s \n",des);
98 printf("Domaine en regard : %d \n",ndom);
99 printf("Maillage distant : %s \n",maa_dist);
100
101
102
103 /* lecture des correspondances une par une
104 en connaissant leur type a priori */
105
106 /* Lecture de la correspondance Noeud Noeud */
107 afficheCorres(fid,maa,jnt,MED_NOEUD,0,MED_NOEUD,0,"noeud/noeud");
108
109 /* Lecture de la correspondance Noeud Maille */
110 afficheCorres(fid,maa,jnt,MED_NOEUD,0,MED_MAILLE,MED_TRIA3,"noeud/TRIA3");
111
112
113 /* lecture des correspondances une par une
114 sans connaitre leur type a priori
115 -> utilisation de la fonction MEDjointTypeCorres */
116
117 ncor=1;
118
119 while (MEDjointTypeCorres(fid,maa,jnt,ncor,
120 &typ_ent_local,&typ_geo_local,&typ_ent_distant,&typ_geo_distant)>=0) {
121
122 /* Lecture de la correspondance Noeud Noeud */
123 afficheCorres(fid,maa,jnt,typ_ent_local,typ_geo_local,typ_ent_distant,typ_geo_distant,"noeud/noeud");
124
125 ncor++;
126 }
127
128
129
130 }
131
132 /* Fermeture du fichier */
133 if (MEDfermer(fid) < 0) {
134 MESSAGE("Erreur a la fermeture du fichier ");
135 return -1;
136 }
137
138 return ret;
139 }
140
141
142
143
144 int afficheCorres(med_idt fid, char *maa, char *jnt,
145 med_entite_maillage typ_ent_local, med_geometrie_element typ_geo_local,
146 med_entite_maillage typ_ent_distant, med_geometrie_element typ_geo_distant,
147 char *type)
148 {
149 med_int nc;
150 med_int *cortab;
151 int k,ncor,ret=0;
152
153 if ((nc = MEDjointnCorres(fid,maa,jnt,typ_ent_local,typ_geo_local,typ_ent_distant,typ_geo_distant)) < 0) {
154 MESSAGE("Erreur a la lecture des infos sur le nombre d'entite en regard de type");
155 SSCRUTE(type);
156 return -1;
157 }
158
159 printf("nb de couples d'entites en regard %s: %d \n",type,nc);
160
161 if (nc > 0) {
162 cortab = (med_int*) malloc(sizeof(med_int)*nc*2);
163 if (ret =MEDjointLire(fid,maa,jnt,cortab,nc*2,
164 typ_ent_local,typ_geo_local,typ_ent_distant,typ_geo_distant) < 0) {
165 MESSAGE("Erreur a la lecture des correspondances sur ");
166 SSCRUTE(type);
167 ret = -1;
168 }
169 if (ret == 0)
170 for (k=0;k<nc;k++)
171 printf("Correspondance %d : %d et %d \n",k+1,*(cortab+2*k),
172 *(cortab+2*k+1));
173 free(cortab);
174 }
175 return ret;
176 }
177