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