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