# 2.3.6/test7.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2012  EDF R&D, CEA/DEN
    00004  *  MED is free software: you can redistribute it and/or modify
    00005  *  it under the terms of the GNU Lesser General Public License as published by
    00006  *  the Free Software Foundation, either version 3 of the License, or
    00007  *  (at your option) any later version.
    00008  *
    00009  *  MED is distributed in the hope that it will be useful,
    00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00012  *  GNU Lesser General Public License for more details.
    00013  *
    00014  *  You should have received a copy of the GNU Lesser General Public License
    00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
    00016  */
    00017
    00018 /******************************************************************************
    00019  * - Nom du fichier : test7.c
    00020  *
    00021  * - Description : lecture des elements du maillage MED crees par test6
    00022  *
    00023  *****************************************************************************/
    00024
    00025 #include <med.h>
    00026 #define MESGERR 1
    00027 #include "med_utils.h"
    00028 #include <string.h>
    00029
    00030 #ifdef DEF_LECT_ECR
    00031 #define MODE_ACCES MED_LECTURE_ECRITURE
    00032 #elif DEF_LECT_AJOUT
    00033 #define MODE_ACCES MED_LECTURE_AJOUT
    00034 #else
    00035 #define MODE_ACCES MED_CREATION
    00036 #endif
    00037
    00038 int main (int argc, char **argv)
    00039
    00040
    00041 {
    00042   med_err ret = 0;
    00043   med_idt fid;
    00044   med_int nse2;
    00045   med_int *se2_1;
    00046   med_int *se2_2;
    00047   char *nomse2;
    00048   med_int *numse2;
    00049   med_int *nufase2;
    00050   med_int ntr3;
    00051   med_int *tr3;
    00052   char *nomtr3;
    00053   med_int *numtr3;
    00054   med_int *nufatr3;
    00055   char maa[MED_TAILLE_NOM+1] ="maa1";
    00056   med_int mdim = 2;
    00057   med_booleen inoele,inuele;
    00058   med_int tse2,ttr3;
    00059   med_int i;
    00060   char str[MED_TAILLE_PNOM+1];
    00061   med_int profil[2] = { 2, 3 };
    00062   char desc[MED_TAILLE_DESC+1];
    00063   med_maillage type;
    00064
    00065   /* Ouverture du fichier en mode lecture seule */
    00066   if ((fid = MEDouvrir("test6.med",MED_LECTURE)) < 0) {
    00067     MESSAGE("Erreur a l'ouverture du fichier test6.med");
    00068     return -1;
    00069   }
    00070
    00071   /* Lecture des informations sur le premier maillage */
    00072   if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0)  {
    00073     MESSAGE("Erreur a la lecture des information sur le 1er maillage");
    00074     return -1;
    00075   } else
    00076     printf("Maillage de nom : %s et de dimension %d \n",maa,mdim);
    00077
    00078   /* Combien de triangles et de segments */
    00079   if ((nse2 = MEDnEntMaa(fid,maa,MED_CONN,MED_ARETE,MED_SEG2,MED_DESC)) < 0)  {
    00080     MESSAGE("Erreur a la lecture du nombre de faces MED_SEG2");
    00081     return -1;
    00082   }
    00083   if ((ntr3 = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_TRIA3,MED_DESC))<0) {
    00084     MESSAGE("Erreur a la lecture du nombre de mailles MED_TRIA3");
    00085     return -1;
    00086   }
    00087   printf("Nombre de MED_SEG2 : "IFORMAT" - nombre de MED_TRIA3 : "IFORMAT"\n",nse2,ntr3);
    00088
    00089   /* Allocations memoire */
    00090   tse2 = 2;
    00091   se2_1  = (med_int*) calloc(tse2*nse2,sizeof(med_int));
    00092   se2_2  = (med_int*) malloc(sizeof(med_int)*tse2*nse2);
    00093   nomse2 = (char*) malloc(MED_TAILLE_PNOM*nse2+1);
    00094   numse2 = (med_int*) malloc(sizeof(med_int)*nse2);
    00095   nufase2 = (med_int*) malloc(sizeof(med_int)*nse2);
    00096
    00097   ttr3 = 3;
    00098   tr3 = (med_int*) malloc(sizeof(med_int)*ntr3*ttr3);
    00099   nomtr3 = (char*) malloc(MED_TAILLE_PNOM*ntr3+1);
    00100   numtr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
    00101   nufatr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
    00102
    00103   /* Lecture des connectivites des segments avec profil */
    00104   if (MEDconnLire(fid,maa,mdim,se2_1,MED_FULL_INTERLACE,profil,2,
    00105                   MED_ARETE,MED_SEG2,MED_DESC) < 0) {
    00106     MESSAGE("Erreur a la lecture de la connectivite des segments");
    00107     return -1;
    00108   }
    00109
    00110   /* Lecture de la connectivite des segments */
    00111   if (MEDconnLire(fid,maa,mdim,se2_2,MED_FULL_INTERLACE,NULL,0,
    00112                   MED_ARETE  ,MED_SEG2,MED_DESC) < 0) {
    00113     MESSAGE("Erreur a la lecture de la connectivite des segments");
    00114     return -1;
    00115   }
    00116
    00117   /* Lecture (optionnelle) des noms des segments */
    00118   if (MEDnomLire(fid,maa,nomse2,nse2,MED_ARETE,MED_SEG2) < 0)
    00119     inoele = MED_FAUX;
    00120   else
    00121     inoele = MED_VRAI;
    00122
    00123   /* Lecture (optionnelle) des numeros des segments */
    00124   if (MEDnumLire(fid,maa,numse2,nse2,MED_ARETE,MED_SEG2) < 0)
    00125     inuele = MED_FAUX;
    00126   else
    00127     inuele = MED_VRAI;
    00128
    00129   /* Lecture des numeros des familles des segments */
    00130   if (MEDfamLire(fid,maa,nufase2,nse2,MED_ARETE,MED_SEG2) < 0) {
    00131     MESSAGE("Erreur a la lecture des numéros de famille des segments");
    00132     return -1;
    00133   }
    00134
    00135   /* Lecture de la connectivite des triangles */
    00136   if (MEDconnLire(fid,maa,mdim,tr3,MED_NO_INTERLACE,NULL,0,MED_MAILLE,MED_TRIA3,
    00137                      MED_DESC) < 0) {
    00138     MESSAGE("Erreur a la lecture de la connectivite des triangles");
    00139     return -1;
    00140   }
    00141
    00142   /* Lecture (optionnelle) des noms des triangles */
    00143   if (MEDnomLire(fid,maa,nomtr3,ntr3,MED_MAILLE,MED_TRIA3) < 0)
    00144     inoele = MED_FAUX;
    00145   else
    00146     inoele = MED_VRAI;
    00147
    00148   /* Lecture (optionnelle) des numeros des triangles */
    00149   if (MEDnumLire(fid,maa,numtr3,ntr3,MED_MAILLE,MED_TRIA3) < 0)
    00150     inuele = MED_FAUX;
    00151   else
    00152     inuele = MED_VRAI;
    00153
    00154   /* Lecture des numeros des familles des triangles */
    00155   if (ret = MEDfamLire(fid,maa,nufatr3,ntr3,MED_MAILLE,MED_TRIA3) < 0) {
    00156     MESSAGE("Erreur a la lecture des numeros de famille des segments");
    00157     return -1;
    00158   }
    00159
    00160   /* Fermeture du fichier */
    00161   if (MEDfermer(fid) < 0) {
    00162     MESSAGE("Erreur a la fermeture du fichier");
    00163     return -1;
    00164   }
    00165
    00166   /* Affichage */
    00167   if (ret == 0) {
    00168     printf("Connectivite des segments (1): \n");
    00169     for (i=0;i<nse2*tse2;i++)
    00170       printf(IFORMAT" ",*(se2_1+i));
    00171     printf("\n");
    00172     printf("Connectivite des segments (2): \n");
    00173     for (i=0;i<nse2*tse2;i++)
    00174       printf(IFORMAT" ",*(se2_2+i));
    00175     if (inoele) {
    00176       printf("\nNoms des segments :\n");
    00177       for (i=0;i<nse2;i++) {
    00178         strncpy(str,nomse2+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    00179         str[MED_TAILLE_PNOM] = '\0';
    00180         printf("%s ",str);
    00181       }
    00182     }
    00183     if (inuele) {
    00184       printf("\nNumeros des segments :\n");
    00185       for (i=0;i<nse2;i++)
    00186         printf(IFORMAT" ",*(numse2+i));
    00187     }
    00188     printf("\nNumeros des familles des segments :\n");
    00189     for (i=0;i<nse2;i++)
    00190       printf(IFORMAT" ",*(nufase2+i));
    00191
    00192     printf("\nConnectivite des triangles : \n");
    00193     for (i=0;i<ntr3*ttr3;i++)
    00194       printf(IFORMAT" ",*(tr3+i));
    00195     if (inoele) {
    00196       printf("\nNoms des triangles :\n");
    00197       for (i=0;i<ntr3;i++) {
    00198         strncpy(str,nomtr3+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
    00199         str[MED_TAILLE_PNOM] = '\0';
    00200         printf("%s ",str);
    00201       }
    00202     }
    00203     if (inuele) {
    00204       printf("\nNumeros des triangles :\n");
    00205       for (i=0;i<ntr3;i++)
    00206         printf(IFORMAT" ",*(numtr3+i));
    00207     }
    00208     printf("\nNumeros des familles des triangles :\n");
    00209     for (i=0;i<ntr3;i++)
    00210       printf(IFORMAT" ",*(nufatr3+i));
    00211
    00212     printf("\n");
    00213   }
    00214
    00215   /* Nettoyage memoire */
    00216   free(se2_1);
    00217   free(se2_2);
    00218   free(nomse2);
    00219   free(numse2);
    00220   free(nufase2);
    00221
    00222   free(tr3);
    00223   free(nomtr3);
    00224   free(numtr3);
    00225   free(nufatr3);
    00226
    00227   return ret;
    00228 }
    00229