MEDstructElementInfoByName.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 <stdlib.h>
00024 #include <string.h>
00025 
00048 med_err
00049 MEDstructElementInfoByName(const med_idt             fid,
00050                            const char *        const modelname,
00051                            med_geometry_type * const mgeotype,
00052                            med_int*            const modeldim,
00053                            char*               const supportmeshname,
00054                            med_entity_type*    const sentitytype,
00055                            med_int*            const snnode,
00056                            med_int*            const sncell,
00057                            med_geometry_type*  const sgeotype,
00058                            med_int*            const nconstantattribute,
00059                            med_bool*           const anyprofile,
00060                            med_int*            const nvariableattribute
00061                            )
00062 {
00063 
00064   med_err           _ret=-1;
00065   med_idt            _elemid=0, _cstid=0;
00066   char              _path[MED_TAILLE_STRCT+MED_NAME_SIZE+1]=MED_STRCT;
00067   char              __profilename   [MED_NAME_SIZE+1]=MED_NO_PROFILE_INTERNAL;
00068   const char*       _profilename   = __profilename;
00069   med_int           _intentitytype = MED_UNDEF_ENTITY_TYPE;
00070   med_int           _nentity       = 0;
00071   med_size          _tmpn          = 0;
00072   med_bool          _chgt=MED_FALSE,_trsf=MED_FALSE;
00073   med_int           _medintmgeotype = MED_NONE;
00074   med_int           _medintsgeotype = MED_NONE;
00075   med_int           _intanyprofile  = 0;
00076 
00077   strcat(_path,modelname);
00078 
00079   /*
00080    * Si le DataGroup /STRUCT/<modelname> n'existe pas => erreur
00081    */
00082   if ((_elemid = _MEDdatagroupOpen(fid,_path)) < 0)  {
00083     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path);
00084     goto ERROR;
00085   }
00086 
00087   /*
00088    * Lecture de l'attribut MED_NOM_NEO (numéro de type géométrique associé à un élément de structure)
00089    */
00090   if ( _MEDattrEntierLire(_elemid,MED_NOM_NEO,&_medintmgeotype) < 0 ) {
00091     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00092     SSCRUTE(MED_NOM_NEO);ISCRUTE(_medintmgeotype);
00093     goto ERROR;
00094   }
00095   *mgeotype=_medintmgeotype;
00096 
00097   /*
00098    * Lecture de l'attribut MED_NOM_DIM (dimension de l'élément)
00099    */
00100   if ( _MEDattrEntierLire(_elemid,MED_NOM_DIM,modeldim) < 0 ) {
00101     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00102     SSCRUTE(MED_NOM_DIM);ISCRUTE(*modeldim);
00103     goto ERROR;
00104   }
00105 
00106   /*
00107    * Lecture  de l'attribut MED_NOM_NOM (nom du maillage support)
00108    */
00109   /* Chercher plutôt ds le maillage support et supprimer les attributs NBM et NBN */
00110   if ( _MEDattrStringLire(_elemid,MED_NOM_NOM,MED_NAME_SIZE,supportmeshname) < 0) {
00111     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00112     SSCRUTE(MED_NOM_NOM);SSCRUTE(supportmeshname);
00113     goto ERROR;
00114   }
00115 
00116   /*
00117    * Lecture de l'attribut MED_NOM_ENT (type d'entité support)
00118    */
00119   if ( _MEDattrEntierLire(_elemid,MED_NOM_ENT,&_intentitytype) < 0 ) {
00120     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00121     SSCRUTE(MED_NOM_ENT);ISCRUTE(_intentitytype);
00122     goto ERROR;
00123   }
00124 
00125   *sentitytype = (med_entity_type) _intentitytype;
00126 
00127   /*
00128    * Lecture de l'attribut MED_NOM_GEO (type géométrique des mailles support)
00129    */
00130   if ( _MEDattrEntierLire(_elemid,MED_NOM_GEO,&_medintsgeotype) < 0 ) {
00131     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path);
00132     SSCRUTE(MED_NOM_GEO);ISCRUTE(_medintsgeotype);
00133     goto ERROR;
00134   }
00135   *sgeotype=_medintsgeotype;
00136 
00137   /*
00138    * Lecture du nombre de noeuds support
00139    */
00140   if (strlen(supportmeshname)) {
00141     if ( (*snnode = MEDmeshnEntity(fid,supportmeshname,MED_NO_DT,MED_NO_IT,
00142                                      MED_NODE,MED_NONE,MED_COORDINATE,MED_NO_CMODE,
00143                                      &_chgt,&_trsf) )  <= 0) {
00144       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity");
00145       ISCRUTE(*snnode);goto ERROR;
00146     }
00147   } else {
00148     *snnode=1;
00149   }
00150   /*
00151    * Lecture du nombre de mailles support
00152    */
00153 
00154   if (strlen(supportmeshname)) {
00155     if ( (*sncell = MEDmeshnEntity(fid,supportmeshname,MED_NO_DT,MED_NO_IT,
00156                                      MED_CELL,*sgeotype,MED_CONNECTIVITY,MED_NODAL,
00157                                      &_chgt,&_trsf) )  < 0) {
00158       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity");
00159       ISCRUTE(*sncell);goto ERROR;
00160     }
00161   } else {
00162     *sncell=0;
00163   }
00164 
00165 
00166   _MEDnObjects(_elemid,MED_CSTATR_NOM,&_tmpn);
00167 
00168   if ( _tmpn > 0) {
00169 
00170     if ((_cstid = _MEDdatagroupOpen(_elemid,MED_CSTATR_NOM)) < 0) {
00171       MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_CSTATR_NOM);
00172       SSCRUTE(_path);goto ERROR;
00173     }
00174 
00175     if ( _MEDattrEntierLire(_cstid,MED_NOM_PFU,&_intanyprofile) < 0) {
00176       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_STRUCT_MSG);
00177       SSCRUTE(modelname);SSCRUTE(MED_NOM_PFU);
00178       goto ERROR;
00179     }
00180     *anyprofile=_intanyprofile;
00181 
00182     *nconstantattribute = (med_int) _tmpn;
00183 
00184   } else {
00185     *anyprofile = MED_FALSE;
00186     *nconstantattribute = 0;
00187   }
00188 
00189   _MEDnObjects(_elemid,MED_VARATR_NOM,&_tmpn);
00190   if ( _tmpn > 0)
00191     *nvariableattribute = (med_int) _tmpn;
00192   else
00193     *nvariableattribute = (med_int) 0;
00194 
00195   _ret=0;
00196 
00197  ERROR:
00198 
00199   if (_cstid>0)            if (_MEDdatagroupFermer(_cstid) < 0) {
00200     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_CSTATR_NOM);
00201     ISCRUTE_id(_cstid);
00202   }
00203 
00204   if (_elemid>0)            if (_MEDdatagroupFermer(_elemid) < 0) {
00205     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,modelname);
00206     ISCRUTE_id(_elemid);
00207   }
00208 
00209   return _ret;
00210 }

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