MED fichier
test9.c
Aller à la documentation de ce fichier.
1/* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2020 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 : test9.c
21 *
22 * - Description : lecture des familles d'un maillage MED
23 *
24 *****************************************************************************/
25
26#include <med.h>
27#define MESGERR 1
28#include "med_utils.h"
29#include <string.h>
30
31#ifdef DEF_LECT_ECR
32#define MODE_ACCES MED_ACC_RDWR
33#elif DEF_LECT_AJOUT
34#define MODE_ACCES MED_ACC_RDEXT
35#else
36#define MODE_ACCES MED_ACC_CREAT
37#endif
38
39int main (int argc, char **argv)
40{
41 med_err ret = 0;
42 med_idt fid;
43 char maa[MED_NAME_SIZE+1];
44 med_int mdim;
45 med_int nfam;
46 int i,j;
47 med_int natt,ngro;
48 char *attdes,*gro;
49 med_int *attval,*attide;
50 char nomfam[MED_NAME_SIZE+1];
51 med_int numfam=0, nstep=0, sdim=0;
52 char str1[MED_COMMENT_SIZE+1];
53 char str2[MED_LNAME_SIZE+1];
54 char desc[MED_COMMENT_SIZE+1];
55 char dtunit[MED_SNAME_SIZE+1]="";
56 char nomcoo[2*MED_SNAME_SIZE+1]="";
57 char unicoo[2*MED_SNAME_SIZE+1]="";
58 med_mesh_type type;
60 med_axis_type rep;
61
62 /* Ouverture du fichier "test8.med" en lecture seule */
63 if ((fid = MEDfileOpen("test8.med",MED_ACC_RDONLY)) < 0) {
64 MESSAGE("Erreur a l'ouverture du fichier test8.med");
65 return -1;
66 }
67
68 if ((sdim=MEDmeshnAxis(fid, 1)) <0) {
69 MESSAGE("Erreur a la lecture de la dimension de l'espace du maillage :");
70 SSCRUTE(maa);
71 return -1;
72 }
73
74 /* Lecture des infos concernant le premier maillage */
75 if ( MEDmeshInfo( fid, 1, maa, &sdim, &mdim, &type, desc, dtunit, &sort,
76 &nstep, &rep, nomcoo,unicoo) < 0 ) {
77 MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
78 return -1;
79 } else {
80 printf("Maillage de nom : |%s| , de dimension : "IFORMAT" , et de type %d\n",maa,mdim,type);
81 printf("\t -Dimension de l'espace : "IFORMAT"\n",sdim);
82 printf("\t -Description du maillage : %s\n",desc);
83 printf("\t -Noms des axes : |%s|\n",nomcoo);
84 printf("\t -Unités des axes : |%s|\n",unicoo);
85 printf("\t -Type de repère : %d\n",rep);
86 printf("\t -Nombre d'étape de calcul : "IFORMAT"\n",nstep);
87 printf("\t -Unité des dates : |%s|\n",dtunit);
88 }
89
90
91 /* Lecture du nombre de familles */
92 if ((nfam = MEDnFamily(fid,maa)) < 0) {
93 MESSAGE("Erreur a la lecture du nombre de famille");
94 return -1;
95 }
96 printf("Nombre de familles : "IFORMAT" \n",nfam);
97
98 /* Lecture de chaque famille */
99 for (i=0;i<nfam;i++) {
100
101 /* Lecture du nombre de groupe */
102 if ((ngro = MEDnFamilyGroup(fid,maa,i+1)) < 0) {
103 MESSAGE("Erreur a la lecture du nombre de groupe de la famille d'indice : ");
104 ISCRUTE_int(i+1);
105 ret = -1;
106 }
107
108 /* Lecture du nombre d'attribut */
109 if ((natt = MEDnFamily23Attribute(fid,maa,i+1)) < 0) {
110 MESSAGE("Erreur a la lecture du nombre d'attribut de la famille d'indice : ");
111 ISCRUTE_int(i+1);
112 ret = -1;
113 }
114
115 if (ret == 0)
116 printf("Famille %d a "IFORMAT" attributs et "IFORMAT" groupes \n",i+1,natt,ngro);
117
118 /* Lecture des informations sur la famille */
119 if (ret == 0) {
120 /* Allocations memoire */
121 attide = (med_int*) malloc(sizeof(med_int)*natt);
122 attval = (med_int*) malloc(sizeof(med_int)*natt);
123 attdes = (char *) malloc(MED_COMMENT_SIZE*natt+1);
124 gro = (char*) malloc(MED_LNAME_SIZE*ngro+1);
125
126 if (MEDfamily23Info(fid,maa,i+1,nomfam,attide,attval,attdes,&numfam,gro) < 0) {
127 MESSAGE("Erreur a la lecture des informations de la famille d'indice : ");
128 ISCRUTE_int(i+1);
129 ret = -1;
130 }
131
132 if (ret == 0) {
133 printf("Famille de nom %s et de numero "IFORMAT" : \n",nomfam,numfam);
134 printf("Attributs : \n");
135 for (j=0;j<natt;j++) {
136 strncpy(str1,attdes+j*MED_COMMENT_SIZE,MED_COMMENT_SIZE);
137 str1[MED_COMMENT_SIZE] = '\0';
138 printf("ide = "IFORMAT" - val = "IFORMAT" - des = %s\n",*(attide+j),
139 *(attval+j),str1);
140 }
141 free(attide);
142 free(attval);
143 free(attdes);
144
145 for (j=0;j<ngro;j++) {
146 strncpy(str2,gro+j*MED_LNAME_SIZE,MED_LNAME_SIZE);
147 str2[MED_LNAME_SIZE] = '\0';
148 printf("gro = %s\n",str2);
149 }
150 free(gro);
151 }
152 }
153 }
154
155 /* Fermeture du fichier */
156 if (MEDfileClose(fid) < 0) {
157 MESSAGE("Erreur a la fermeture du fichier");
158 return -1;
159 }
160
161 return ret;
162}
MEDC_EXPORT med_err MEDfamily23Info(const med_idt fid, const char *const meshname, const int famit, char *const familyname, med_int *const attributenumber, med_int *const attributevalue, char *const attributedes, med_int *const familynumber, char *const groupname)
Cette routine permet de lire les informations relatives à une famille d'un maillage créé avec MED 2....
MEDC_EXPORT med_int MEDnFamily23Attribute(const med_idt fid, const char *const meshname, const int famit)
Cette routine permet de lire le nombre d'attribut dans une famille dans un maillage créé avec MED 2....
MEDC_EXPORT med_int MEDnFamily(const med_idt fid, const char *const meshname)
Cette routine permet de lire le nombre de famille dans un maillage.
Definition: MEDnFamily.c:35
MEDC_EXPORT med_int MEDnFamilyGroup(const med_idt fid, const char *const meshname, const int famit)
Cette routine permet de lire le nombre de groupe dans une famille.
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
Definition: MEDfileOpen.c:42
MEDC_EXPORT med_err MEDmeshInfo(const med_idt fid, const int meshit, char *const meshname, med_int *const spacedim, med_int *const meshdim, med_mesh_type *const meshtype, char *const description, char *const dtunit, med_sorting_type *const sortingtype, med_int *const nstep, med_axis_type *const axistype, char *const axisname, char *const axisunit)
Cette routine permet de lire les informations relatives à un maillage dans un fichier.
Definition: MEDmeshInfo.c:43
MEDC_EXPORT med_int MEDmeshnAxis(const med_idt fid, const int meshit)
Cette routine permet de lire dans un maillage le nombre d'axes du repère des coordonnées des noeuds.
Definition: MEDmeshnAxis.c:35
#define MED_NAME_SIZE
Definition: med.h:81
#define MED_LNAME_SIZE
Definition: med.h:83
#define MED_SNAME_SIZE
Definition: med.h:82
med_axis_type
Definition: med.h:258
med_sorting_type
Definition: med.h:300
med_mesh_type
Definition: med.h:131
int med_int
Definition: med.h:333
#define MED_COMMENT_SIZE
Definition: med.h:79
herr_t med_err
Definition: med.h:323
@ MED_ACC_RDONLY
Definition: med.h:120
hid_t med_idt
Definition: med.h:322
#define SSCRUTE(chaine)
Definition: med_utils.h:323
#define MESSAGE(chaine)
Definition: med_utils.h:324
#define IFORMAT
Definition: med_utils.h:145
#define ISCRUTE_int(entier)
Definition: med_utils.h:314
int main(int argc, char **argv)
Definition: test9.c:39