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 : test28.c 21 * 22 * - Description : lecture d'un maillage structure (grille cartesienne | 23 * grille polaire) dans le fichier test27.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 int i; 44 med_err ret = 0; 45 med_idt fid; 46 /* la dimension du maillage */ 47 med_int mdim,axe,j; 48 med_float *indices; 49 med_int nind,nmaa; 50 /* nom du maillage de longueur maxi MED_TAILLE_NOM */ 51 char maa[MED_TAILLE_NOM+1]; 52 /* composantes et unites */ 53 char comp[MED_TAILLE_PNOM+1]; 54 char unit[MED_TAILLE_PNOM+1]; 55 char desc[MED_TAILLE_DESC+1]; 56 med_maillage type_maillage; 57 med_type_grille type; 58 med_table quoi; 59 med_int nnoeuds; 60 char *comp2, *unit2; 61 med_float *coo; 62 med_int *structure_grille; 63 med_repere repere; 64 65 /* Ouverture du fichier test17.med en lecture seule */ 66 fid = MEDouvrir("test27.med",MED_LECTURE); 67 if (fid < 0) { 68 MESSAGE("Erreur a l'ouverture du fichier test27.med"); 69 return -1; 70 } 71 72 /* Lecture du nombre de maillage */ 73 nmaa = MEDnMaa(fid); 74 if (nmaa < 0) { 75 MESSAGE("Erreur a la lecture du nombre de maillage"); 76 return -1; 77 } 78 79 /* On boucle sur les maillages et on ne lit que la grille cartesienne 80 et la grille desturcutree */ 81 for (i=0;i<nmaa;i++) { 82 83 /* On repere le maillage qui nous interesse */ 84 if (MEDmaaInfo(fid,i+1,maa,&mdim,&type_maillage,desc) < 0) { 85 MESSAGE("Erreur a la lecture des infos sur le maillage"); 86 return -1; 87 } 88 printf("Maillage de nom [%s] de dimension %d \n",maa,mdim); 89 if (type_maillage == MED_STRUCTURE) 90 printf("- Type : Maillage structure \n"); 91 else 92 printf("- Type : Maillage non structure \n"); 93 94 /* On regarde le type de la grille */ 95 if (type_maillage == MED_STRUCTURE) { 96 if (MEDnatureGrilleLire(fid,maa,&type) < 0) { 97 MESSAGE("Erreur a la lecture de la nature d'une grille"); 98 return -1; 99 } 100 if (type == MED_GRILLE_CARTESIENNE) 101 printf("- Grille cartesienne \n"); 102 if (type == MED_GRILLE_STANDARD) 103 printf("- Grille de-structureee \n"); 104 } 105 106 /* On regarde les coordonnees de la grille standard */ 107 if (type_maillage == MED_STRUCTURE && type == MED_GRILLE_STANDARD) { 108 109 nnoeuds = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0); 110 if (nnoeuds < 0) { 111 MESSAGE("Erreur a la lecture du nombre de noeuds"); 112 return -1; 113 } 114 printf("Nombre de noeuds : %d \n",nnoeuds); 115 116 structure_grille = (med_int *) malloc(sizeof(med_int)*mdim); 117 if (MEDstructureCoordLire(fid,maa,mdim,structure_grille) < 0) { 118 MESSAGE("Erreur a la lecture de la structure de la grille"); 119 ret = -1; 120 } 121 if (ret == 0) { 122 printf("Structure des noeuds de la grille : [ "); 123 for (j=0;j<mdim;j++) 124 printf(" %d ",*(structure_grille+j)); 125 printf(" ] \n"); 126 free(structure_grille); 127 } 128 129 if (ret == 0) { 130 coo = (med_float *) malloc(sizeof(med_float)*nnoeuds*mdim); 131 comp2 = (char *) malloc(sizeof(char)*(mdim*MED_TAILLE_PNOM+1)); 132 unit2 = (char *) malloc(sizeof(char)*(mdim*MED_TAILLE_PNOM+1)); 133 134 if (ret = MEDcoordLire(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_ALL,NULL,0, 135 &repere,comp2,unit2) < 0) { 136 MESSAGE("Erreur a la lecture des coordonnees des noeuds"); 137 ret = -1; 138 } 139 } 140 141 if (ret == 0) { 142 printf("Coordonnees : [ "); 143 for (j=0;j<nnoeuds*mdim;j++) 144 printf(" %f ",*(coo+j)); 145 printf(" ] \n"); 146 free(coo); 147 free(comp2); 148 free(unit2); 149 } 150 } 151 152 /* On regarde les coordonnees des indices de la grille cartesienne */ 153 if (type_maillage == MED_STRUCTURE && type == MED_GRILLE_CARTESIENNE) 154 for(axe=1;axe<=mdim;axe++) { 155 switch(axe) { 156 case 1 : 157 quoi = MED_COOR_IND1; 158 break; 159 160 case 2 : 161 quoi = MED_COOR_IND2; 162 break; 163 164 case 3 : 165 quoi = MED_COOR_IND3; 166 break; 167 168 default : 169 return -1; 170 } 171 172 nind = MEDnEntMaa(fid,maa,quoi,MED_NOEUD,0,0); 173 if (nind < 0) { 174 MESSAGE("Erreur a la lecture de la taille de l'indice"); 175 return -1; 176 } 177 printf("Lecture de la taille de l'indice : %d \n",nind); 178 179 /* on lit le tableau des indices */ 180 indices = (med_float *) malloc(sizeof(med_float)*nind); 181 if (MEDindicesCoordLire(fid,maa,mdim,indices,nind,axe,comp,unit) < 0) { 182 MESSAGE("Erreur a lecture de indices de coordonnees"); 183 ret = -1; 184 } 185 if (ret == 0) { 186 printf("Axe %s [%s] : [ ",comp,unit); 187 for (j=0;j<nind;j++) 188 printf(" %f ",indices[j]); 189 printf(" ] \n"); 190 free(indices); 191 } 192 } 193 } 194 195 /* On ferme le fichier */ 196 if (MEDfermer(fid) < 0) { 197 MESSAGE("Erreur a la fermeture du fichier"); 198 return -1; 199 } 200 printf("Fermeture du fichier \n"); 201 202 return ret; 203 }