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