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 #include <med.h>
20 #include <med_config.h>
21 #include <med_outils.h>
22 #include <hdf5.h>
23 #include <string.h>
24
25 /**\ingroup MEDinterp
26 \brief \MEDinterpInfoByNameBrief
27 \param fid \fid
28 \param interpname \interpname
29 \param geotype \geotype
30 \param cellnode \cellnode
31 \param nbasisfunc \nbasisfunc
32 \param nvariable \nvariable
33 \param maxdegree \maxdegree
34 \param nmaxcoef \nmaxcoef
35
36 \return \error
37 \details \MEDinterpInfoByNameDetails
38 \see MEDinterpInfo
39 */
40 med_err
MEDinterpInfoByName(const med_idt fid,const 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)41 MEDinterpInfoByName(const med_idt fid,
42 const char* const interpname,
43 med_geometry_type* const geotype,
44 med_bool* const cellnode,
45 med_int* const nbasisfunc,
46 med_int* const nvariable,
47 med_int* const maxdegree,
48 med_int* const nmaxcoef
49 )
50 {
51 med_idt _interpid=0;
52 med_int _err=-1;
53 med_err _ret=-1;
54 char _path[MED_INTERPOLATION_GRP_SIZE+MED_NAME_SIZE+1]=MED_INTERPOLATION_GRP;
55 med_int _cellnode = 0;
56 med_size _tmpn=0;
57 med_int _medintgeotype=MED_UNDEF_GEOTYPE;
58
59 /*
60 * On inhibe le gestionnaire d'erreur
61 */
62 _MEDmodeErreurVerrouiller();
63
64
65 NOFINALBLANK(interpname,ERROR);
66 strcat(_path,interpname);
67 /*
68 * Ouverture du DataGroup /INTERP/<interpname>
69 */
70 if ((_interpid = _MEDdatagroupOpen(fid,_path)) < 0) {
71 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,interpname);
72 SSCRUTE(_path);goto ERROR;
73 }
74
75 /*
76 * Lecture de l'attribut MED_NOM_GEO
77 */
78 if ( _MEDattrEntierLire(_interpid,MED_NOM_GEO,&_medintgeotype) < 0 ) {
79 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
80 SSCRUTE(MED_NOM_GEO);ISCRUTE(_medintgeotype);
81 goto ERROR;
82 }
83 *geotype=(med_geometry_type) _medintgeotype;
84
85 /*
86 * Lecture de l'attribut MED_NOM_NBV
87 */
88 if ( _MEDattrEntierLire(_interpid,MED_NOM_NBV,nvariable) < 0 ) {
89 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
90 SSCRUTE(MED_NOM_NBV);ISCRUTE(*nvariable);
91 goto ERROR;
92 }
93
94 /*
95 * Lecture de l'attribut MED_NOM_MDG
96 */
97 if ( _MEDattrEntierLire(_interpid,MED_NOM_MDG,maxdegree) < 0 ) {
98 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
99 SSCRUTE(MED_NOM_MDG);ISCRUTE(*maxdegree);
100 goto ERROR;
101 }
102
103 /*
104 * Lecture de l'attribut MED_NOM_MCF
105 */
106 if ( _MEDattrEntierLire(_interpid,MED_NOM_MCF,nmaxcoef) < 0 ) {
107 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
108 SSCRUTE(MED_NOM_MCF);ISCRUTE(*nmaxcoef);
109 goto ERROR;
110 }
111
112 /*
113 * Lecture de l'attribut MED_NOM_FCN
114 */
115 if ( _MEDattrEntierLire(_interpid,MED_NOM_FCN,&_cellnode) < 0 ) {
116 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
117 SSCRUTE(MED_NOM_FCN);ISCRUTE(_cellnode);
118 goto ERROR;
119 }
120 if (_cellnode) *cellnode=MED_TRUE; else *cellnode=MED_FALSE;
121
122 /*
123 * Lecture de l'attribut MED_NOM_NBB
124 */
125 /* if ( _MEDattrEntierLire(_interpid,MED_NOM_NBB,nbasisfunc) < 0 ) { */
126 /* MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path); */
127 /* SSCRUTE(MED_NOM_NBB);ISCRUTE(*nbasisfunc); */
128 /* goto ERROR; */
129 /* } */
130
131 /*
132 * Lecture du nombre de fonctions de base
133 */
134 if ((_err=_MEDnObjects(fid,_path,&_tmpn)) <0)
135 if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) {
136 MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_INTERP,_path);
137 goto ERROR;
138 }
139 *nbasisfunc = (med_int) _tmpn;
140
141 _ret = 0;
142
143 ERROR:
144
145 if (_interpid>0) if (_MEDdatagroupFermer(_interpid) < 0) {
146 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path);
147 ISCRUTE_id(_interpid);
148 }
149 return _ret;
150
151 }
152