MEDstructElementConstAttRd.c

Aller à la documentation de ce fichier.
00001 /*  This file is part of MED.
00002  *
00003  *  COPYRIGHT (C) 1999 - 2015  EDF R&D, CEA/DEN
00004  *  MED is free software: you can redistribute it and/or modify
00005  *  it under the terms of the GNU Lesser General Public License as published by
00006  *  the Free Software Foundation, either version 3 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  MED is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU Lesser General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU Lesser General Public License
00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
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    * Si le DataGroup /STRUCT/<modelname> n'existe pas => erreur
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    * Si le DataGroup /STRUCT/<modelname>/CSTATT/<constattributename> n'existe pas => erreur
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    * Lecture de l'attribut MED_NOM_NOM (nom du maillage support)
00092    */
00093   /* Chercher plutôt ds le maillage support et supprimer les attributs NBM et NBN */
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        * Lecture de l'attribut MED_NOM_GEO (type géométrique des mailles support)
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 

Généré le Thu Oct 8 14:26:16 2015 pour MED fichier par  doxygen 1.6.1