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