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