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 }