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 : test22.c 22 * 23 * - Description : lecture de valeurs scalaires numeriques crees dans test21. 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_idt fid; 44 char nom_scalaire[MED_TAILLE_NOM+1]; 45 char description[MED_TAILLE_DESC+1]; 46 med_int vali; 47 med_float valr; 48 med_int i,n,npdt,j; 49 med_type_champ type; 50 med_int numdt,numo; 51 med_float dt; 52 char dt_unit[MED_TAILLE_PNOM+1]; 53 54 /* Ouverture du fichier test21.med en lecture seule */ 55 if ((fid = MEDouvrir("test21.med",MED_LECTURE)) < 0) { 56 MESSAGE("Erreur a l'ouverture du fichier test21.med"); 57 return -1; 58 } 59 60 /* Lecture du nombre de variable scalaire */ 61 n = MEDnScalaire(fid); 62 if (n < 0) { 63 MESSAGE("Erreur a la lecture du nombre de variable scalaire"); 64 return -1; 65 } 66 printf("Nombre de variables scalaires dans tes21.med = %d\n",n); 67 68 /* Lecture des infos sur les variables (type,description) */ 69 for (i=1;i<=n;i++) { 70 71 if (MEDscalaireInfo(fid,i,nom_scalaire,&type,description) < 0) { 72 MESSAGE("Erreur a la lecture des infos sur la variable d'indice : "); 73 ISCRUTE(i); 74 return -1; 75 } 76 printf("- Scalaire n°%d de nom %s \n",i,nom_scalaire); 77 if (type == MED_FLOAT64) 78 printf(" Type flottant. \n"); 79 else 80 printf(" Type entier. \n"); 81 printf(" Description associee : [%s] \n",description); 82 83 /* Pour chaque scalaire on regarde les valeurs associees 84 eventuellement a des pas de temps et des numeros d'ordre */ 85 npdt = MEDnScalairePasdetemps(fid,nom_scalaire); 86 if (npdt < 0) { 87 MESSAGE("Erreur a la lecture du nombre de pas de temps"); 88 return -1; 89 } 90 printf(" Nombre de valeurs stockees : %d \n",npdt); 91 92 for (j=1;j<=npdt;j++) { 93 94 if (MEDscalairePasdetempsInfo(fid,nom_scalaire,j,&numdt,dt_unit,&dt,&numo) < 0) { 95 MESSAGE("Erreur a la lecture des informations sur le pas de temps d'indice :"); 96 ISCRUTE(j); 97 return -1; 98 } 99 100 printf(" Valeur n°%d : \n",j); 101 if (numdt == MED_NOPDT) 102 printf(" - Aucun de pas de temps \n"); 103 else 104 printf(" - Pas de de temps de numero %d de valeur %f [%s] \n",numdt,dt,dt_unit); 105 if (numo == MED_NONOR) 106 printf(" - Aucun numero d'ordre \n"); 107 else 108 printf(" - Numero d'ordre : %d \n",numo); 109 110 /* Lecture de la valeur flottante associee au pas de temps */ 111 if (type == MED_FLOAT64) { 112 if (MEDscalaireFlottantLire(fid,nom_scalaire,&valr,numdt,numo) < 0) { 113 MESSAGE("Erreur a la lecture de la valeur flottante : "); 114 SSCRUTE(nom_scalaire); ISCRUTE(numdt);ISCRUTE(numo); 115 return -1; 116 } 117 printf(" - Valeur : %f \n",valr); 118 } else { 119 /* Lecture de la valeur scalaire associee au pas de temps */ 120 if (MEDscalaireEntierLire(fid,nom_scalaire,&vali,numdt,numo) < 0) { 121 MESSAGE("Erreur a la lecture de la valeur entiere : "); 122 SSCRUTE(nom_scalaire); ISCRUTE(numdt);ISCRUTE(numo); 123 return -1; 124 } 125 printf(" - Valeur : %d \n",vali); 126 } 127 } 128 129 } 130 131 /* Fermeture du fichier */ 132 if (MEDfermer(fid) < 0) { 133 MESSAGE("Erreur a la fermeture du fichier "); 134 return -1; 135 } 136 137 return 0; 138 }