1 /* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2019 EDF R&D, CEA/DEN
4 * MED is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * MED is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with MED. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18
19 /******************************************************************************
20 * - Nom du fichier : test22.c
21 *
22 * - Description : lecture de valeurs scalaires numeriques crees dans test21.
23 *
24 *****************************************************************************/
25
26 #include <med.h>
27 #define MESGERR 1
28 #include <med_utils.h>
29
30 #ifdef DEF_LECT_ECR
31 #define MODE_ACCES MED_LECTURE_ECRITURE
32 #elif DEF_LECT_AJOUT
33 #define MODE_ACCES MED_LECTURE_AJOUT
34 #else
35 #define MODE_ACCES MED_CREATION
36 #endif
37
main(int argc,char ** argv)38 int main (int argc, char **argv)
39
40
41 {
42 med_idt fid;
43 char nom_scalaire[MED_TAILLE_NOM+1];
44 char description[MED_TAILLE_DESC+1];
45 med_int vali;
46 med_float valr;
47 med_int i,n,npdt,j;
48 med_type_champ type;
49 med_int numdt,numo;
50 med_float dt;
51 char dt_unit[MED_TAILLE_PNOM+1];
52
53 /* Ouverture du fichier test21.med en lecture seule */
54 if ((fid = MEDouvrir("test21.med",MED_LECTURE)) < 0) {
55 MESSAGE("Erreur a l'ouverture du fichier test21.med");
56 return -1;
57 }
58
59 /* Lecture du nombre de variable scalaire */
60 n = MEDnScalaire(fid);
61 if (n < 0) {
62 MESSAGE("Erreur a la lecture du nombre de variable scalaire");
63 return -1;
64 }
65 printf("Nombre de variables scalaires dans tes21.med = %d\n",n);
66
67 /* Lecture des infos sur les variables (type,description) */
68 for (i=1;i<=n;i++) {
69
70 if (MEDscalaireInfo(fid,i,nom_scalaire,&type,description) < 0) {
71 MESSAGE("Erreur a la lecture des infos sur la variable d'indice : ");
72 ISCRUTE(i);
73 return -1;
74 }
75 printf("- Scalaire n°"IFORMAT" de nom %s \n",i,nom_scalaire);
76 if (type == MED_FLOAT64)
77 printf(" Type flottant. \n");
78 else
79 printf(" Type entier. \n");
80 printf(" Description associee : [%s] \n",description);
81
82 /* Pour chaque scalaire on regarde les valeurs associees
83 eventuellement a des pas de temps et des numeros d'ordre */
84 npdt = MEDnScalairePasdetemps(fid,nom_scalaire);
85 if (npdt < 0) {
86 MESSAGE("Erreur a la lecture du nombre de pas de temps");
87 return -1;
88 }
89 printf(" Nombre de valeurs stockees : "IFORMAT" \n",npdt);
90
91 for (j=1;j<=npdt;j++) {
92
93 if (MEDscalairePasdetempsInfo(fid,nom_scalaire,j,&numdt,dt_unit,&dt,&numo) < 0) {
94 MESSAGE("Erreur a la lecture des informations sur le pas de temps d'indice :");
95 ISCRUTE(j);
96 return -1;
97 }
98
99 printf(" Valeur n°"IFORMAT" : \n",j);
100 if (numdt == MED_NOPDT)
101 printf(" - Aucun de pas de temps \n");
102 else
103 printf(" - Pas de de temps de numero "IFORMAT" de valeur %f [%s] \n",numdt,dt,dt_unit);
104 if (numo == MED_NONOR)
105 printf(" - Aucun numero d'ordre \n");
106 else
107 printf(" - Numero d'ordre : "IFORMAT" \n",numo);
108
109 /* Lecture de la valeur flottante associee au pas de temps */
110 if (type == MED_FLOAT64) {
111 if (MEDscalaireFlottantLire(fid,nom_scalaire,&valr,numdt,numo) < 0) {
112 MESSAGE("Erreur a la lecture de la valeur flottante : ");
113 SSCRUTE(nom_scalaire); ISCRUTE(numdt);ISCRUTE(numo);
114 return -1;
115 }
116 printf(" - Valeur : %f \n",valr);
117 } else {
118 /* Lecture de la valeur scalaire associee au pas de temps */
119 if (MEDscalaireEntierLire(fid,nom_scalaire,&vali,numdt,numo) < 0) {
120 MESSAGE("Erreur a la lecture de la valeur entiere : ");
121 SSCRUTE(nom_scalaire); ISCRUTE(numdt);ISCRUTE(numo);
122 return -1;
123 }
124 printf(" - Valeur : "IFORMAT" \n",vali);
125 }
126 }
127
128 }
129
130 /* Fermeture du fichier */
131 if (MEDfermer(fid) < 0) {
132 MESSAGE("Erreur a la fermeture du fichier ");
133 return -1;
134 }
135
136 return 0;
137 }
138