      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 }