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 /****************************************************************************** 21 * - Nom du fichier : test5.c 22 * 23 * - Description : lecture des noeuds d'un maillage MED. 24 * 25 *****************************************************************************/ 26 27 #include <med.h> 28 #include <med_utils.h> 29 #include <string.h> 30 #include <stdlib.h> 31 32 int main (int argc, char **argv) 33 { 34 med_err ret = 0; 35 med_idt fid; 36 /* la dimension du maillage */ 37 med_int mdim; 38 /* nom du maillage de longueur maxi MED_TAILLE_NOM */ 39 char maa[MED_TAILLE_NOM+1]; 40 /* le nombre de noeuds */ 41 med_int nnoe = 0; 42 /* table des coordonnees */ 43 med_float *coo1,*coo2; 44 /* tables des noms et des unites des coordonnees 45 profil : (dimension*MED_TAILLE_PNOM+1) */ 46 char nomcoo[2*MED_TAILLE_PNOM+1]; 47 char unicoo[2*MED_TAILLE_PNOM+1]; 48 /* tables des noms, numeros, numeros de familles des noeuds 49 autant d'elements que de noeuds - les noms ont pout longueur 50 MED_TAILLE_PNOM */ 51 char *nomnoe; 52 med_int *numnoe; 53 med_int *nufano; 54 med_repere rep; 55 med_booleen inonoe,inunoe; 56 char str[MED_TAILLE_PNOM+1]; 57 med_int i; 58 med_int profil[2] = { 2, 3 }; 59 char desc[MED_TAILLE_DESC+1]; 60 med_maillage type; 61 62 /* Ouverture du fichier "test4.med" en lecture seule */ 63 fid = MEDouvrir("test4.med",MED_LECTURE); 64 if (fid < 0) { 65 MESSAGE("Erreur a l'ouverture du fichier test4.med"); 66 return -1; 67 } 68 69 /* Lecture des infos concernant le premier maillage */ 70 if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) { 71 MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa); 72 return -1; 73 } else 74 printf("Maillage de nom : %s et de dimension : %d \n",maa,mdim); 75 76 /* Combien de noeuds a lire ? */ 77 nnoe = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0); 78 if (nnoe < 0) { 79 MESSAGE("Erreur a la lecture du nombre de noeuds dans : "); 80 ret = -1; 81 } else 82 printf("Nombre de noeuds : %d \n",nnoe); 83 84 /* Allocations memoires */ 85 if (nnoe > 0) { 86 /* table des coordonnees 87 profil : (dimension * nombre de noeuds ) */ 88 coo1 = (med_float*) calloc(nnoe*mdim,sizeof(med_float)); 89 coo2 = (med_float*) calloc(nnoe*mdim,sizeof(med_float)); 90 /* table des des numeros, des numeros de familles des noeuds 91 profil : (nombre de noeuds) */ 92 numnoe = (med_int*) malloc(sizeof(med_int)*nnoe); 93 nufano = (med_int*) malloc(sizeof(med_int)*nnoe); 94 /* table des noms des noeuds 95 profil : (nnoe*MED_TAILLE_PNOM+1) */ 96 nomnoe = (char*) malloc(MED_TAILLE_PNOM*nnoe+1); 97 } 98 99 /* Lecture des composantes n°2 des coordonnees des noeuds */ 100 if (nnoe > 0) { 101 if (MEDcoordLire(fid,maa,mdim,coo1,MED_FULL_INTERLACE,2,NULL,0, 102 &rep,nomcoo,unicoo) < 0) { 103 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 104 ret = -1; 105 } else { 106 printf("Valeur de coo1 : "); 107 for (i=0;i<nnoe*mdim;i++) 108 printf("%4.2f ",coo1[i]); 109 printf("\n"); 110 } 111 } 112 113 /* Lecture des composantes n°1 des coordonnees des noeuds */ 114 if (nnoe > 0) { 115 if (MEDcoordLire(fid,maa,mdim,coo1,MED_FULL_INTERLACE,1,NULL,0, 116 &rep,nomcoo,unicoo) < 0) { 117 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 118 ret = -1; 119 } else { 120 printf("Valeur de coo1 : "); 121 for (i=0;i<nnoe*mdim;i++) 122 printf("%4.2f ",coo1[i]); 123 printf("\n"); 124 } 125 } 126 127 /* Lecture des composantes n°1 des coordonnees des noeuds du profil */ 128 if (nnoe > 0) { 129 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,2,profil,2, 130 &rep,nomcoo,unicoo) < 0) { 131 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 132 ret = -1; 133 } else { 134 printf("Valeur de coo2 : "); 135 for (i=0;i<nnoe*mdim;i++) 136 printf("%4.2f ",coo2[i]); 137 printf("\n"); 138 } 139 } 140 141 /* Lecture des composantes n°2 des coordonnees des noeuds du profil */ 142 if (nnoe > 0) { 143 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,1,profil,2, 144 &rep,nomcoo,unicoo) < 0) { 145 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 146 ret = -1; 147 } else { 148 printf("Valeur de coo2 : "); 149 for (i=0;i<nnoe*mdim;i++) { 150 printf("%4.2f ",coo2[i]); 151 coo2[i] = 0.0; 152 } 153 printf("\n"); 154 } 155 } 156 157 /* Lecture de toutes les composantes des coordonnees des noeuds du profil */ 158 if (nnoe > 0) { 159 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,MED_ALL,profil,2, 160 &rep,nomcoo,unicoo) < 0) { 161 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 162 ret = -1; 163 } else { 164 printf("Valeur de coo2 : "); 165 for (i=0;i<nnoe*mdim;i++) { 166 printf("%4.2f ",coo2[i]); 167 coo2[i] = 0.0; 168 } 169 printf("\n"); 170 } 171 } 172 173 /* Lecture des composantes des coordonnees des noeuds */ 174 if (nnoe > 0) { 175 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,MED_ALL,NULL,0, 176 &rep,nomcoo,unicoo) < 0) { 177 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 178 ret = -1; 179 } else { 180 printf("Valeur de coo2 : "); 181 for (i=0;i<nnoe*mdim;i++) 182 printf("%4.2f ",coo2[i]); 183 printf("\n"); 184 } 185 } 186 187 /* Lecture des noms des noeuds (optionnel dans un maillage MED) */ 188 if (nnoe > 0) 189 if (MEDnomLire(fid,maa,nomnoe,nnoe,MED_NOEUD,0) < 0) 190 inonoe = MED_FAUX; 191 else 192 inonoe = MED_VRAI; 193 194 /* Lecture des numeros des noeuds (optionnel dans un maillage MED) */ 195 if (nnoe > 0) 196 if (MEDnumLire(fid,maa,numnoe,nnoe,MED_NOEUD,0) < 0) 197 inunoe = MED_FAUX; 198 else 199 inunoe = MED_VRAI; 200 201 /* Lecture des numeros de familles des noeuds */ 202 if (nnoe > 0) 203 if (MEDfamLire(fid,maa,nufano,nnoe,MED_NOEUD,0) < 0) { 204 MESSAGE("Erreur a la lecture des numeros de famille des noeuds"); 205 ret = -1; 206 } 207 208 /* Fermeture du fichier */ 209 if (MEDfermer(fid) < 0){ 210 MESSAGE("Erreur a la fermeture du fichier"); 211 ret = -1; 212 } 213 214 /* Affichage des resulats */ 215 if (ret == 0 && nnoe > 0) 216 { 217 printf("Type de repere : %d \n",rep); 218 printf("Nom des coordonnees : \n"); 219 for (i=0;i<mdim;i++) 220 { 221 strncpy(str,nomcoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM); 222 str[MED_TAILLE_PNOM] = '\0'; 223 printf("%s ",str); 224 } 225 printf("\nUnites des coordonnees : \n"); 226 for (i=0;i<mdim;i++) 227 { 228 strncpy(str,unicoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM); 229 str[MED_TAILLE_PNOM] = '\0'; 230 printf("%s ",str); 231 } 232 printf("\nCoordonnees des noeuds : \n"); 233 for (i=0;i<nnoe*mdim;i++) 234 printf("%f ",*(coo2+i)); 235 if (inonoe) 236 { 237 printf("\nNoms des noeuds : \n"); 238 for (i=0;i<nnoe;i++) 239 { 240 strncpy(str,nomnoe+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM); 241 str[MED_TAILLE_PNOM] = '\0'; 242 printf(" %s ",str); 243 } 244 } 245 if (inunoe) 246 { 247 printf("\nNumeros des noeuds : \n"); 248 for (i=0;i<nnoe;i++) 249 printf("%d ",*(numnoe+i)); 250 } 251 printf("\nNumeros des familles des noeuds : \n"); 252 for (i=0;i<nnoe;i++) 253 printf("%d ",*(nufano+i)); 254 printf("\n"); 255 } 256 257 /* liberation memoire */ 258 if (nnoe > 0) { 259 free(coo1); 260 free(coo2); 261 free(nomnoe); 262 free(numnoe); 263 free(nufano); 264 } 265 266 return ret; 267 } 268 269 270 271