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 : test17.c
 21  *
 22  * - Description : lecture d'elements de maillages MED ecrits par test16
 23  *                 via les routines de niveau 2
 24  *                 - equivalent a test7.c
 25  *
 26  *****************************************************************************/
 27 
 28 #include <med.h>
 29 #define MESGERR
 30 #include <med_utils.h>
 31 
 32 #ifdef DEF_LECT_ECR
 33 #define MODE_ACCES MED_LECTURE_ECRITURE
 34 #elif DEF_LECT_AJOUT
 35 #define MODE_ACCES MED_LECTURE_AJOUT
 36 #else
 37 #define MODE_ACCES MED_CREATION
 38 #endif
 39 
 40 int main (int argc, char **argv)
 41 
 42 
 43 {
 44   med_err ret = 0;
 45   med_idt fid;
 46   med_int nse2;
 47   med_int *se2;
 48   char *nomse2;
 49   med_int *numse2;
 50   med_int *nufase2;
 51   med_int ntr3;
 52   med_int *tr3;
 53   char *nomtr3;
 54   med_int *numtr3;
 55   med_int *nufatr3;
 56   char maa[MED_TAILLE_NOM+1] ="maa1";
 57   med_int mdim;
 58   med_booleen inoele1,inoele2,inuele1,inuele2;
 59   med_int tse2,ttr3;
 60   med_int i;
 61   char str[MED_TAILLE_PNOM+1];
 62   char desc[MED_TAILLE_DESC+1];
 63   med_maillage type;
 64 
 65   /* Ouverture du fichier test16.med en lecture seule */
 66   if ((fid = MEDouvrir("test16.med",MED_LECTURE)) < 0) {
 67     MESSAGE("Erreur a l'ouverture du fichier test16.med");
 68     return -1;
 69   }
 70 
 71   /* Lecture des infos sur le 1er maillage */
 72   if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) {
 73     MESSAGE("Erreur a la 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 triangle et de segment */
 79   if ((nse2 = MEDnEntMaa(fid,maa,MED_CONN,MED_ARETE,MED_SEG2,MED_DESC)) < 0) {
 80     MESSAGE("Erreur a la lecture du nombre de segments ");
 81     return -1;
 82   }
 83   if ((ntr3 = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_TRIA3,MED_DESC))<0) {
 84     MESSAGE("Erreur a la lecture du nombre de triangles ");
 85     return -1;
 86   }
 87   printf("Nombre de MED_SEG2 : %d - nombre de MED_TRIA3 : %d\n",nse2,ntr3);
 88 
 89   /* Allocations memoire */
 90   tse2 = 2;
 91   se2  = (med_int*) malloc(sizeof(med_int)*tse2*nse2);
 92   nomse2 = (char*) malloc(MED_TAILLE_PNOM*nse2+1);
 93   numse2 = (med_int*) malloc(sizeof(med_int)*nse2);
 94   nufase2 = (med_int*) malloc(sizeof(med_int)*nse2);
 95 
 96   ttr3 = 3;
 97   tr3 = (med_int*) malloc(sizeof(med_int)*ntr3*ttr3);
 98   nomtr3 = (char*) malloc(MED_TAILLE_PNOM*ntr3+1);
 99   numtr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
100   nufatr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
101 
102   /* Lecture des aretes segments MED_SEG2 : 
103      - Connectivite,
104      - Noms (optionnel)
105      - Numeros (optionnel)
106      - Numeros de familles */
107   if (MEDelementsLire(fid,maa,mdim,se2,MED_NO_INTERLACE,nomse2,&inoele1,numse2,&inuele1,
108                       nufase2,nse2,MED_ARETE,MED_SEG2,MED_DESC) < 0) {
109     MESSAGE("Erreur a la lecture des segments");
110     ret = -1;
111   }
112 
113   /* Lecture des mailles triangles MED_TRIA3 : 
114      - Connectivite,
115      - Noms (optionnel)
116      - Numeros (optionnel)
117      - Numeros de familles */
118   if (MEDelementsLire(fid,maa,mdim,tr3,MED_NO_INTERLACE,nomtr3,&inoele2,numtr3,&inuele2,
119                       nufatr3,ntr3,MED_MAILLE,MED_TRIA3,MED_DESC) < 0) {
120     MESSAGE("Erreur a la lecture des triangles");
121     ret = -1;
122   }
123 
124   /* Fermeture du fichier */
125   if (MEDfermer(fid) < 0) {
126     MESSAGE("Erreur a la fermeture du fichier");
127     ret = -1;
128   }
129 
130   /* Affichage */
131   if (ret == 0) {
132     if (nse2 > 0) {
133       printf("Connectivite des segments : \n");
134       for (i=0;i<nse2*tse2;i++)
135         printf("%d ",*(se2+i));
136       if (inoele1) {
137         printf("\nNoms des segments :\n");
138         for (i=0;i<nse2;i++) {
139           strncpy(str,nomse2+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
140           str[MED_TAILLE_PNOM] = '\0';
141           printf("%s ",str);
142         }
143       }
144       if (inuele1) {
145         printf("\nNumeros des segments :\n");
146         for (i=0;i<nse2;i++)
147           printf("%d ",*(numse2+i));
148       }
149       printf("\nNumeros des familles des segments :\n");
150       for (i=0;i<nse2;i++)
151         printf("%d ",*(nufase2+i));
152     }
153 
154     if (ntr3 > 0) {
155       printf("\nConnectivite des triangles : \n");
156       for (i=0;i<ntr3*ttr3;i++)
157         printf("%d ",*(tr3+i));
158       if (inoele2) {
159         printf("\nNoms des triangles :\n");
160         for (i=0;i<ntr3;i++) {
161           strncpy(str,nomtr3+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
162           str[MED_TAILLE_PNOM] = '\0';
163           printf("%s ",str);
164         }
165       }
166       if (inuele2) {
167         printf("\nNumeros des triangles :\n");
168         for (i=0;i<ntr3;i++)
169           printf("%d ",*(numtr3+i));
170       }
171       printf("\nNumeros des familles des triangles :\n");
172       for (i=0;i<ntr3;i++)
173         printf("%d ",*(nufatr3+i));
174 
175       printf("\n");
176     }
177   }
178 
179   /* Nettoyage memoire */
180   free(se2);
181   free(nomse2);
182   free(numse2);
183   free(nufase2);
184 
185   free(tr3);
186   free(nomtr3);
187   free(numtr3);
188   free(nufatr3);
189 
190   return ret;
191 }
192 
193 
194 
195