00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022 
00023 #include <string.h>
00024 #include <stdlib.h>
00025 
00041 med_err
00042 MEDstructElementConstAttRd(
00043                            const med_idt                  fid,
00044                            const char*              const modelname,
00045                            const char*              const constattname,
00046                            void*              const value
00047                            )
00048 {
00049   med_err            _ret=-1;
00050   med_idt            _attid=0, _elemid=0 ;
00051   char               _path[MED_TAILLE_STRCT+MED_NAME_SIZE+1+MED_TAILLE_CSTATR+MED_NAME_SIZE+1]=MED_STRCT;
00052   med_int            _intentitytype = 0;
00053   med_int            _nentity       = 0;
00054   med_attribute_type _constatttype  = MED_ATT_UNDEF;
00055   med_int            _ncomponent = 0;
00056   med_entity_type    _entitytype    = MED_UNDEF_ENTITY_TYPE;
00057   char               _supportmeshname[MED_NAME_SIZE+1]="";
00058   char               _profilename    [MED_NAME_SIZE+1]="";
00059   med_int            _profilesize   = 0;
00060   med_filter         _filter        = MED_FILTER_INIT;
00061   med_int            _medintsgeotype      = MED_NONE;
00062   med_bool           _chgt=MED_FALSE,_trsf=MED_FALSE;
00063 
00064   NOFINALBLANK(modelname,ERROR);
00065   NOFINALBLANK(constattname,ERROR);
00066 
00067   strcat(_path,modelname);
00068 
00069 
00070   
00071 
00072 
00073   if ((_elemid = _MEDdatagroupOpen(fid,_path)) < 0)  {
00074     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path);
00075     goto ERROR;
00076   }
00077 
00078   strcat(_path,MED_CSTATR);
00079   strcat(_path,constattname);
00080 
00081   
00082 
00083 
00084   if ((_attid = _MEDdatagroupOpen(fid,_path)) < 0)  {
00085     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path);
00086     goto ERROR;
00087   }
00088 
00089 
00090   
00091 
00092 
00093   
00094   if ( _MEDattrStringLire(_elemid,MED_NOM_NOM,MED_NAME_SIZE,_supportmeshname) < 0) {
00095     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00096     SSCRUTE(MED_NOM_NOM);SSCRUTE(_supportmeshname);
00097     goto ERROR;
00098   }
00099 
00100   if (
00101       MEDstructElementConstAttInfoByName(fid,
00102                                          modelname,
00103                                          constattname,
00104                                          &_constatttype,
00105                                          &_ncomponent,
00106                                          &_entitytype,
00107                                          _profilename,
00108                                          &_profilesize
00109                                          ) < 0 ) {
00110     MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,MED_ERR_STRUCT_MSG);
00111     SSCRUTE(modelname);SSCRUTE(_path);SSCRUTE("MEDstructElementConstAttInfoByName");
00112     goto ERROR;
00113   }
00114 
00115 
00116   if (strlen(_supportmeshname) ) {
00117 
00118     if (_entitytype == MED_CELL )
00119 
00120       
00121 
00122 
00123       if ( _MEDattrEntierLire(_elemid,MED_NOM_GEO,&_medintsgeotype) < 0 ) {
00124         MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00125         SSCRUTE(MED_NOM_GEO);ISCRUTE(_medintsgeotype);
00126         goto ERROR;
00127       }
00128 
00129       if ( (_nentity = MEDmeshnEntity(fid,_supportmeshname,MED_NO_DT,MED_NO_IT,
00130                                       MED_CELL,(med_geometry_type) _medintsgeotype,
00131                                       MED_CONNECTIVITY,MED_NODAL,
00132                                      &_chgt,&_trsf) )  < 0) {
00133       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity");
00134       ISCRUTE(_nentity);goto ERROR;
00135     }
00136 
00137     if (_entitytype == MED_NODE )
00138       if ( (_nentity = MEDmeshnEntity(fid,_supportmeshname,MED_NO_DT,MED_NO_IT,
00139                                       MED_NODE,MED_NONE,MED_COORDINATE,MED_NO_CMODE,
00140                                       &_chgt,&_trsf) )  <= 0) {
00141         MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity");
00142         ISCRUTE(_nentity);goto ERROR;
00143       }
00144   } else
00145     _nentity = 1;
00146 
00147   if ( MEDfilterEntityCr(fid, _nentity, 1, _ncomponent, MED_ALL_CONSTITUENT,
00148                          MED_FULL_INTERLACE,MED_COMPACT_PFLMODE,
00149                          _profilename, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) {
00150     MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG);
00151     goto ERROR;
00152   }
00153 
00154   if ( _MEDdatasetRd(_attid,MED_NOM_COR,_constatttype,&_filter, (unsigned char * ) value) < 0) {
00155     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_COR);
00156     SSCRUTE(_path);
00157     goto ERROR;
00158   }
00159 
00160   if ( MEDfilterClose(&_filter) < 0 ) {
00161     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_STRUCT_ELEMENT_MSG);
00162     SSCRUTE(_path);
00163     goto ERROR;
00164   }
00165 
00166   _ret=0;
00167  ERROR:
00168 
00169   if (_attid>0)            if (_MEDdatagroupFermer(_attid) < 0) {
00170     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,modelname);
00171     ISCRUTE_id(_attid);
00172   }
00173 
00174   if (_elemid>0)            if (_MEDdatagroupFermer(_elemid) < 0) {
00175     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,modelname);
00176     ISCRUTE_id(_elemid);
00177   }
00178 
00179   return _ret;
00180 }
00181