MED fichier

Test_MEDinterpBaseFunctionCoeffSize.c
Aller à la documentation de ce fichier.
1 /* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2021 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 #include <med.h>
19 #define MESGERR 1
20 #include <med_utils.h>
21 #include <string.h>
22
23 #ifdef DEF_LECT_ECR
24 #define MODE_ACCES MED_ACC_RDWR
25 #elif DEF_LECT_AJOUT
26 #define MODE_ACCES MED_ACC_RDEXT
27 #else
28 #define MODE_ACCES MED_ACC_CREAT
29 #endif
30
31 int main (int argc, char **argv)
32
33 {
34 med_err _ret=-1;
35 med_idt _fid=0;
36
37 med_int _ninterp=0;
38 int _interpit =0;
39 char _interpname[MED_NAME_SIZE+1]="";
40 med_geometry_type _geotype =MED_NONE;
41 med_bool _cellnodes =MED_FALSE;
42 med_int _nbasisfunc =0;
43 med_int _nvariable =0;
44 med_int _maxdegree =0;
45 med_int _nmaxcoefficient =0;
46 int _basisfuncit =0;
47 int _powerit =0;
48 med_int _ncoefficient =0;
49 med_int* _power =NULL;
50 med_float* _coefficient =NULL;
51 int _coefficientit =0;
52
53
54 /* Ouverture en mode creation du fichier "current.med" */
55 _fid = MEDfileOpen("current.med",MED_ACC_RDONLY);
56 if (_fid < 0) {
57 MESSAGE("Erreur a la creation du fichier current.med");
58 return -1;
59 }
60
61 if ( (_ninterp = MEDnInterp(_fid)) <0) {_ret=_ninterp;goto ERROR;}
62
63 ISCRUTE(_ninterp);
64
65 for ( _interpit=1; _interpit<= _ninterp; ++_interpit) {
66
67 if ( (_ret = MEDinterpInfo(_fid,
68 _interpit,
69 _interpname,
70 &_geotype,
71 &_cellnodes,
72 &_nbasisfunc,
73 &_nvariable,
74 &_maxdegree,
75 &_nmaxcoefficient
76 ) <0) ) {
77 MESSAGE("Erreur à lecture d'informations de la fonction d'interpolation n°");ISCRUTE(_interpit);
78 goto ERROR;
79 }
80
81 fprintf(stdout,"Fonction d'interpolation n° %d |%s| sur le type géométrique n° %d\n",
82 _interpit,_interpname, _geotype);
83
84 if ( _cellnodes )
85 if ( _nbasisfunc == (_geotype % 100) )
86 fprintf(stdout,"\t Les noeuds de construction sont les noeuds de la maille de référence.\n");
87 else {
88 MESSAGE("Erreur : le nombre de noeuds de construction "\
89 "est différent du nombre de noeuds de la maille de référence.\n");
90 ISCRUTE(_nbasisfunc); ISCRUTE(_geotype % 100);
91 }
92
93 if ( _nvariable != (_geotype / 100) ) {
94 MESSAGE("Erreur : le nombre de variables "\
95 "est différent de la dimension de l'espace de la maille de référence.\n");
96 ISCRUTE(_nvariable); ISCRUTE (_geotype / 100);
97 } else
98 fprintf(stdout,"\t Il y a %d fonctions de base avec %d variables\n ",_nbasisfunc,_nvariable);
99 fprintf(stdout,"\t Le degré maximum des fonctions de base est %d et possèdent au maximum %d coefficients\n"
100 ,_maxdegree,_nmaxcoefficient);
101
102
103
104 for ( _basisfuncit=1; _basisfuncit<= _nbasisfunc; ++_basisfuncit) {
105
106 if ( (_ncoefficient = MEDinterpBaseFunctionCoefSize( _fid,
107 _interpname,
108 _basisfuncit) ) <0 ) {
109 MESSAGE("Erreur à la lecture du nombre de coefficients de la fonction de base n°");ISCRUTE(_basisfuncit);
110 goto ERROR;
111 }
112
113 _coefficient = (med_float*) calloc(sizeof(med_float),_ncoefficient);
114 _power = (med_int*) calloc(sizeof(med_int),_nvariable*_ncoefficient);
115
116 if ( (_ret = MEDinterpBaseFunctionRd( _fid,
117 _interpname,
118 _basisfuncit,
119 &_ncoefficient,
120 _power,
121 _coefficient
122 ) <0) ) {
123 MESSAGE("Erreur à la lecture de la fonction de base n°");ISCRUTE(_basisfuncit);
124 free(_coefficient);free(_power);goto ERROR;
125 } else {
126 fprintf(stdout,"\n\t Tableau de coefficients de la fonctions de base n° %d :\n\t",_basisfuncit);
127 for ( _coefficientit=0; _coefficientit< _ncoefficient; ++_coefficientit)
128 fprintf(stdout," %4f ",_coefficient[_coefficientit]);
129
130 fprintf(stdout,"\n\t Tableau de puissances de la fonctions de base n° %d :\n\t",_basisfuncit);
131 for ( _powerit=0; _powerit< _nvariable*_ncoefficient; ++_powerit)
132 fprintf(stdout," %4d ",_power[_powerit]);
133 }
134 free(_coefficient);
135 free(_power);
136 }
137 fprintf(stdout,"\n");
138
139 }
140
141
142 _ret=0;
143 ERROR:
144 if (MEDfileClose(_fid) < 0) {
145 MESSAGE("ERROR : file closing");
146 return -1;
147 }
148
149
150 return _ret;
151
152 }
153
MEDnInterp
MEDC_EXPORT med_int MEDnInterp(const med_idt fid)
Cette routine renvoie le nombre d'interpolations disponibles dans le fichier.
Definition: MEDnInterp.c:34
MEDfileOpen
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
Definition: MEDfileOpen.c:42
med_geometry_type
int med_geometry_type
Definition: med.h:194
med_idt
hid_t med_idt
Definition: med.h:331
MED_ACC_RDONLY
Definition: med.h:120
med_err
herr_t med_err
Definition: med.h:332
MED_FALSE
Definition: med.h:260
MESSAGE
#define MESSAGE(chaine)
Definition: med_utils.h:324
med_int
int med_int
Definition: med.h:342
main
int main(int argc, char **argv)
Definition: Test_MEDinterpBaseFunctionCoeffSize.c:31
med.h
ISCRUTE
#define ISCRUTE(entier)
Definition: med_utils.h:313
med_bool
med_bool
Definition: med.h:260
med_float
double med_float
Definition: med.h:336
MEDinterpBaseFunctionCoefSize
MEDC_EXPORT med_int MEDinterpBaseFunctionCoefSize(const med_idt fid, const char *const interpname, const med_int basisfuncit)
Cette routine retourne ne nombre de coefficients/monômes de la fonction de base/forme n° basisfunctit...
Definition: MEDinterpBaseFunctionCoeffSize.c:37
MED_NONE
#define MED_NONE
Definition: med.h:231
MEDinterpInfo
MEDC_EXPORT med_err MEDinterpInfo(const med_idt fid, const int interpit, char *const interpname, med_geometry_type *const geotype, med_bool *const cellnode, med_int *const nbasisfunc, med_int *const nvariable, med_int *const maxdegree, med_int *const nmaxcoef)
Cette fonction informe des caractéristiques de la fonction d'interpolation n° interpit.
Definition: MEDinterpInfo.c:43
MEDinterpBaseFunctionRd
MEDC_EXPORT med_err MEDinterpBaseFunctionRd(const med_idt fid, const char *const interpname, const int basisfuncit, med_int *const ncoef, med_int *const power, med_float *const coefficient)
Cette routine permet la lecture d'une fonction de base/forme de l'interpolation interpname.
Definition: MEDinterpBaseFunctionRd.c:41
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition: med.h:81
MEDfileClose
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
med_utils.h