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  }