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 }