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 : test15.c
21 *
22 * - Description : lecture des noeuds d'un maillage MED
23 * a l'aide des routines de niveau 2
24 * - equivalent a test5.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 /* la dimension du maillage */
47 med_int mdim;
48 /* nom du maillage de longueur maxi MED_TAILLE_NOM */
49 char maa[MED_TAILLE_NOM+1];
50 /* le nombre de noeuds */
51 med_int nnoe = 0;
52 /* table des coordonnees */
53 med_float *coo;
54 /* tables des noms et des unites des coordonnees
55 profil : (dimension*MED_TAILLE_PNOM+1) */
56 char nomcoo[3*MED_TAILLE_PNOM+1];
57 char unicoo[3*MED_TAILLE_PNOM+1];
58 /* tables des noms, numeros, numeros de familles des noeuds
59 autant d'elements que de noeuds - les noms ont pout longueur
60 MED_TAILLE_PNOM */
61 char *nomnoe;
62 med_int *numnoe;
63 med_int *nufano;
64 med_repere rep;
65 med_booleen inonoe,inunoe;
66 char str[MED_TAILLE_PNOM+1];
67 med_int i;
68 char desc[MED_TAILLE_DESC+1];
69 med_maillage type;
70
71 /* Ouverture du fichier passe en argument en lecture seule */
72 if ((fid= MEDouvrir(argv[1],MED_LECTURE)) < 0) {
73 MESSAGE("Erreur a l'ouverture du fichier :");
74 SSCRUTE(argv[1]);
75 return -1;
76 }
77
78 /* Lecture des infos concernant le premier maillage */
79 if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) {
80 MESSAGE("Erreur a la lecture des informations du 1er maillage");
81 return -1;
82 }
83 printf("Maillage de nom : %s et de dimension : %d \n",maa,mdim);
84
85 /* Lecture du nombre de noeuds */
86 if ((nnoe = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0)) < 0) {
87 MESSAGE("Erreur a la lecture du nombre de noeuds ");
88 return -1;
89 }
90 printf("Nombre de noeuds : %d \n",nnoe);
91
92 /* Allocations memoires */
93 /* table des coordonnees
94 profil : (dimension * nombre de noeuds ) */
95 if (nnoe > 0) {
96 coo = (med_float*) malloc(sizeof(med_float)*nnoe*mdim);
97 /* table des des numeros, des numeros de familles des noeuds
98 profil : (nombre de noeuds) */
99 numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
100 nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
101 /* table des noms des noeuds
102 profil : (nnoe*MED_TAILLE_PNOM+1) */
103 nomnoe = (char*) malloc(MED_TAILLE_PNOM*nnoe+1);
104
105 /* Lecture des noeuds :
106 - Coordonnees
107 - Noms (optionnel dans un fichier MED)
108 - Numeros (optionnel dans un fichier MED)
109 - Numeros de familles */
110 if (MEDnoeudsLire(fid,maa,mdim,coo,MED_FULL_INTERLACE,&rep,nomcoo,unicoo,
111 nomnoe,&inonoe,numnoe,&inunoe,nufano,nnoe) < 0) {
112 MESSAGE("Erreur a la lecture des noeuds du maillage");
113 ret = -1;
114 }
115
116 /* Affichage */
117 if (ret == 0) {
118 printf("Type de repere : %d \n",rep);
119 printf("Nom des coordonnees : \n");
120 for (i=0;i<mdim;i++) {
121 strncpy(str,nomcoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
122 str[MED_TAILLE_PNOM] = '\0';
123 printf("%s ",str);
124 }
125 printf("\nUnites des coordonnees : \n");
126 for (i=0;i<mdim;i++) {
127 strncpy(str,unicoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
128 str[MED_TAILLE_PNOM] = '\0';
129 printf("%s ",str);
130 }
131 printf("\nCoordonnees des noeuds : \n");
132 for (i=0;i<nnoe*mdim;i++)
133 printf("%f ",*(coo+i));
134 if (inonoe) {
135 printf("\nNoms des noeuds : \n");
136 for (i=0;i<nnoe;i++) {
137 strncpy(str,nomnoe+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
138 str[MED_TAILLE_PNOM] = '\0';
139 printf(" %s ",str);
140 }
141 }
142 if (inunoe) {
143 printf("\nNumeros des noeuds : \n");
144 for (i=0;i<nnoe;i++)
145 printf("%d ",*(numnoe+i));
146 }
147 printf("\nNumeros des familles des noeuds : \n");
148 for (i=0;i<nnoe;i++)
149 printf("%d ",*(nufano+i));
150 printf("\n");
151 }
152
153 /* Liberation memoire */
154 free(coo);
155 free(nomnoe);
156 free(numnoe);
157 free(nufano);
158 }
159
160 /* Fermeture du fichier */
161 if (MEDfermer(fid) < 0) {
162 MESSAGE("Erreur a la fermeture du fichier");
163 return -1;
164 }
165
166 return ret;
167 }
168
169
170
171