_MEDmeshnEntity30.c

Aller à la documentation de ce fichier.
00001 /*  This file is part of MED.
00002  *
00003  *  COPYRIGHT (C) 1999 - 2011  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 <string.h>
00022 #include <stdlib.h>
00023 #include <med_outils.h>
00024 
00025 
00026 void
00027 _MEDmeshnEntity30(int dummy, ...)
00028 {
00029 
00030   va_list params;
00031   va_start(params,dummy);
00032 
00033   const med_idt                fid           = va_arg(params, const med_idt               );
00034   const char * const           meshname      = va_arg(params, const char * const          );
00035   const med_int                numdt         = va_arg(params, const med_int               );
00036   const med_int                numit         = va_arg(params, const med_int               );
00037   const med_entity_type        entitytype    = va_arg(params, const med_entity_type       );
00038   const med_geometry_type      geotype       = va_arg(params, const med_geometry_type     );
00039   const med_data_type          meddatatype   = va_arg(params, const med_data_type         );
00040   const med_connectivity_mode  cmode         = va_arg(params, const med_connectivity_mode );
00041   const med_storage_mode       storagemode   = va_arg(params, const med_storage_mode      );
00042         char     * const       profilename   = va_arg(params, char * const                );
00043         med_int  * const       profilesize   = va_arg(params, med_int * const             );
00044         med_bool * const       changement    = va_arg(params, med_bool * const            );
00045         med_bool * const       transformation= va_arg(params, med_bool * const            );
00046         med_int  *             fret          = va_arg(params, med_int *);
00047 
00048   med_access_mode       _MED_ACCESS_MODE;
00049   med_int               _ret=-1,_err=-1;
00050   med_idt               _meshid=0, _datagroup=0,_datagroupf=0,_datagroup1=0;
00051   med_idt               _datagroup2=0,_datagroup3=0,_datagroup4=0,_dataset=0;
00052   char                  _meshpath         [MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1]="";
00053   char                  _datagroupname1   [2*MED_MAX_PARA+1]       ="";
00054   char                  _datagroupname2   [MED_TAILLE_NOM_ENTITE+1]="";
00055   char                  _datagroupname3   [MED_TAILLE_NOM_ENTITE+1]="";
00056   char                  _datagroupname4   [MAX(MED_TAILLE_VARATR,MED_TAILLE_COOTRF)]="";
00057   char                  _datasetconame    [3 + 1 + 3 + 1 ]         ="";
00058   char                  _profilename      [MED_NAME_SIZE+1]        ="";
00059   char                  _geotypename      [MED_TAILLE_NOM_ENTITE+1]="";
00060   char                  _datasetname      [MED_TAILLE_NOM_ENTITE+1]="";
00061   med_sorting_type      _sortingtype       = 0;
00062   med_int               _intsortingtype    = 0;
00063   med_int               _profilearraysize  = 0;
00064   med_int               _changement=0, _changement_s=0, _transformation=0;
00065   med_bool              _changement_co     = MED_FALSE;
00066   med_size              _n=0;
00067   med_bool              _isasupportmesh    = MED_FALSE;
00068   med_bool              _isasoftlink       = MED_FALSE;
00069   med_bool              _datasetexist      = MED_FALSE;
00070   med_int               _ntmpmeddatatype   = 1;
00071   med_data_type         _tmpmeddatatype[3] = {MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE};
00072   med_grid_type         _gridtype          = MED_UNDEF_GRID_TYPE;
00073   med_int               _intgridtype       = 0;
00074   med_int               _intmeshtype       = 0;
00075   med_int               _meshdim           = 0;
00076   int                   _i                 = 0;
00077   med_connectivity_mode _cmode             = cmode;
00078 
00079   /*
00080    * On inhibe le gestionnaire d'erreur HDF 5
00081    */
00082   _MEDmodeErreurVerrouiller();
00083 
00084   if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00085     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00086     goto ERROR;
00087   }
00088 
00089   /*
00090    * Ouverture du datagroup de niveau 1 <_meshpath>/<meshname>
00091    */
00092   NOFINALBLANK(meshname,ERROR);
00093 
00094   if ((_meshid=_MEDmeshDatagroupOpen(fid,meshname,_meshpath,&_isasupportmesh)) < 0) {
00095     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00096     SSCRUTE(_meshpath); goto ERROR;
00097   }
00098 
00099   /* Lecture de la dimension du maillage  */
00100   if (_MEDattrEntierLire(_meshid,MED_NOM_DIM,&_meshdim) < 0) {
00101     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00102     SSCRUTE(meshname);SSCRUTE(MED_NOM_DIM);ISCRUTE(_meshdim);goto ERROR;
00103   }
00104 
00105   /* Lecture du type de maillage (attribut MED_NOM_TYP)  */
00106   if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) {
00107     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00108     SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR;
00109   }
00110 
00111   if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) {
00112 
00113     /* Lecture de l'attribut MED_NOM_GTY  */
00114     if (_MEDattrEntierLire(_meshid,MED_NOM_GTY,&_intgridtype) < 0) {
00115       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00116       SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);ISCRUTE(_intgridtype);goto ERROR;
00117     }
00118     _gridtype= (med_grid_type) _intgridtype;
00119   }
00120 
00121   /*
00122    * Ouverture du datagroup de niveau 2 <numdt>.<numit>
00123    */
00124   if ( _MEDattrEntierLire(_meshid,MED_NOM_SRT,&_intsortingtype) < 0) {
00125     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00126     SSCRUTE(meshname);SSCRUTE(MED_NOM_SRT);ISCRUTE(_intsortingtype);goto ERROR;
00127   }
00128   _sortingtype = (med_sorting_type) (_intsortingtype);
00129 
00130   _MEDgetComputationStepName(_sortingtype,numdt,numit,_datagroupname1);
00131   if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) {
00132     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00133     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00134     SSCRUTE(_datagroupname1);ISCRUTE_id(_datagroup1);goto ERROR;
00135   }
00136 
00137 
00138   /*
00139    * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente)
00140    */
00141   if ( _MEDattrEntierLire(_datagroup1,MED_NOM_CGT,&_changement) < 0) {
00142     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00143     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00144     SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_CGT);goto ERROR;
00145   }
00146 
00147   *changement     = (med_bool) _changement;
00148   *transformation = MED_FALSE;
00149   /*
00150    * Gestion entitytype == MED_NONE
00151    */
00152   if ( entitytype == MED_UNDEF_ENTITY_TYPE ) {
00153     _n=0; goto SORTIE;
00154   }
00155 
00156   /*
00157    * Gestion entitytype == MED_ALL_ENTITY_TYPE
00158    */
00159   if ( entitytype == MED_ALL_ENTITY_TYPE ) {
00160     _err=_MEDnObjects(_datagroup1,".",&_n);
00161     if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) {
00162       MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname1);
00163       goto ERROR;
00164     }
00165     goto SORTIE;
00166   }
00167 
00168 
00169   /*
00170    *  Ouverture du datagroup de niveau 3 <entitytype>
00171    */
00172   if (_MEDgetEntityTypeName(_datagroupname2,entitytype) < 0) {
00173     MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG);
00174     ISCRUTE_int(entitytype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);goto ERROR;
00175   }
00176 
00177   if ((_datagroup2 = _MEDdatagroupOuvrir(_datagroup1,_datagroupname2)) < 0) {
00178     *changement     = (med_bool) MED_FALSE;
00179     _n=0;_datagroup2=0;
00180     goto SORTIE;
00181   }
00182 
00183   /*  MAJ du changement pour le type d'entité <entitytype>
00184    *   ( annulant eventuellement le changement global précédent concernant tous les types d'entités)
00185    *  Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente)
00186    */
00187   if ( _MEDattrEntierLire(_datagroup2,MED_NOM_CGT,&_changement) < 0) {
00188     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00189     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00190     SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_CGT);
00191     goto ERROR;
00192   }
00193   *changement = (med_bool) _changement;
00194 
00195   /*
00196    *  Ouverture du datagroup de niveau 4 <geotype>
00197    */
00198 
00199   /* Pas Utilisation pour MED_NODE  */
00200   if ( geotype == MED_GEO_ALL ) {
00201 
00202     _err=_MEDnObjects(_datagroup2,".",&_n);
00203     if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) {
00204       MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname2);
00205       goto ERROR;
00206     }
00207     if ( ( entitytype == MED_NODE ) && (_n > 0) ) _n=1;
00208     goto SORTIE;
00209   }
00210 
00211   if ( entitytype != MED_NODE ) {
00212 
00213     /* Lecture du nom de type géométrique */
00214     /*TODO : Remplacer les deux appels suivants par un seul gérant les geotype dynamiques et statiques*/
00215     if ( entitytype == MED_STRUCT_ELEMENT ) {
00216       if ( MEDstructElementName(fid, geotype,_datagroupname3) < 0 ) {
00217         MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDstructElementName");
00218         ISCRUTE_int(geotype);goto ERROR;
00219       }
00220     } else
00221       if ( _MEDgetGeometryTypeName(_datagroupname3,geotype) < 0) {
00222         MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG);
00223         ISCRUTE_int(geotype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00224         SSCRUTE(_datagroupname2);goto ERROR;
00225       }
00226 
00227     if ((_datagroup3 = _MEDdatagroupOuvrir(_datagroup2,_datagroupname3)) < 0) {
00228       _n=0;
00229       *changement = MED_FALSE;
00230       goto SORTIE;
00231     }
00232   }
00233 
00234   if (_datagroup3) _datagroup=_datagroup3; else _datagroup=_datagroup2;
00235 
00236   /*  MAJ du changement pour le type géométrique d'entité <geotype>
00237    *   ( annulant eventuellement le changement global précédent concernant tous les types d'entités)
00238    *  Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente)
00239    * Prend en charge le cas d'un dataset vide écrit pour un typegeo donné (CHGT==1)
00240    */
00241   if (_datagroup3) {
00242     if ( _MEDattrEntierLire(_datagroup3,MED_NOM_CGT,&_changement) < 0) {
00243       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00244       SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00245       SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT);
00246       goto ERROR;
00247     }
00248     *changement = (med_bool) _changement;
00249   }
00250 
00251   /*
00252    * Lecture du flag de modification sur autre chose que MED_CONNECTIVITY,MED_COORDINATE,MED_COORDINATE_AXIS<i>
00253    *
00254    */
00255   if ( _MEDattrEntierLire(_datagroup,MED_NOM_CGS,&_changement_s) < 0) {
00256     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00257     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00258     SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGS);goto ERROR;
00259   }
00260 
00261   /* 1)
00262    * Si un changement est présent sur MED_CONNECTIVITY,MED_COORDINATE
00263    *    &&(meddatatype != MED_COORDINATE_AXIS1)&&(meddatatype != MED_COORDINATE_AXIS2)
00264    *    &&(meddatatype != MED_COORDINATE_AXIS3) ) {
00265    * le flag chgt doit être positionné à vrai si on interroge autre chose
00266    * que MED_CONNECTIVITY,MED_COORDINATE
00267    *  <=> modification des datasets COO(si NOE)| NOD|DES(si !NOE)
00268    */
00269   /* 2)
00270    * Positionne un mode de connectivité _cmode si le meddatatype demandé 
00271    * est autre chose que des coordonnées ou des connectivités et le cmode non
00272    * positionné.
00273    * Cette Information est necessaire pour construire le nom du dataset.
00274    */
00275   if (    (meddatatype != MED_CONNECTIVITY) && ( meddatatype != MED_COORDINATE )
00276        && (meddatatype != MED_COORDINATE_AXIS1)
00277        && (meddatatype != MED_COORDINATE_AXIS2)
00278        && (meddatatype != MED_COORDINATE_AXIS3)
00279        && (meddatatype != MED_INDEX_FACE)
00280        && (meddatatype != MED_INDEX_NODE)) {
00281 
00282     if (entitytype == MED_NODE) {
00283       if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) {
00284         if (_gridtype == MED_CARTESIAN_GRID ) {
00285           _ntmpmeddatatype=_meshdim;
00286           _tmpmeddatatype[0] = MED_COORDINATE_AXIS1;
00287           _tmpmeddatatype[1] = MED_COORDINATE_AXIS2;
00288           _tmpmeddatatype[2] = MED_COORDINATE_AXIS3;
00289       } else {
00290         MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GRIDTYPE,MED_ERR_MESH_MSG);
00291         SSCRUTE(meshname);ISCRUTE_int(_gridtype);goto ERROR;
00292         }
00293       } else
00294         _tmpmeddatatype[0] = MED_COORDINATE;
00295     } else {
00296       switch (geotype) {
00297       case MED_POLYHEDRON:
00298         _ntmpmeddatatype=3;
00299         _tmpmeddatatype[2] = MED_CONNECTIVITY;
00300         _tmpmeddatatype[1] = MED_INDEX_FACE;
00301         _tmpmeddatatype[0] = MED_INDEX_NODE;
00302         break;
00303       case MED_POLYGON:
00304         _ntmpmeddatatype=2;
00305         _tmpmeddatatype[1] = MED_CONNECTIVITY;
00306         _tmpmeddatatype[0] = MED_INDEX_NODE;
00307         break;
00308       default:
00309         if ( ( (med_mesh_type) _intmeshtype ) == MED_STRUCTURED_MESH ) {
00310           _ntmpmeddatatype=0;
00311           break;
00312         }
00313         _tmpmeddatatype[0] = MED_CONNECTIVITY;
00314         if ( cmode == MED_NO_CMODE ) {
00315           if ( _MEDdatasetExistByMedtype(_datagroup,MED_CONNECTIVITY,MED_NODAL,
00316                                 &_datasetexist, &_isasoftlink) < 0) {
00317             MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatasetExistByMedtype");
00318             SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00319             SSCRUTE(_datagroupname3);goto ERROR;
00320           }
00321 
00322           if ( _datasetexist ) _cmode= MED_NODAL;
00323           else
00324             if ( _MEDdatasetExistByMedtype(_datagroup,MED_CONNECTIVITY,MED_DESCENDING,
00325                                   &_datasetexist, &_isasoftlink)  < 0) {
00326               MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatasetExistByMedtype");
00327               SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00328               SSCRUTE(_datagroupname3);goto ERROR;
00329             } else
00330               _cmode = MED_DESCENDING;
00331         }
00332       }
00333     }
00334 
00335     *changement = MED_FALSE;
00336     for (_i=0; _i < _ntmpmeddatatype ;++_i) {
00337       if ( _MEDgetDatasetChgt( _datagroup, _tmpmeddatatype[_i], _cmode,
00338                                &_isasoftlink, &_changement_co ) < 0) {
00339         MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"getDatasetChgt");
00340         SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00341         SSCRUTE(_datagroupname3);goto ERROR;
00342       }
00343       *changement |= _changement_co;
00344     }
00345   }
00346 
00347 
00348   /*
00349    * Niveau de datagroup 5 supplémentaire pour les éléments de structure ou les transformations.
00350    */
00351   if (  (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF ) ) {
00352     if (meddatatype == MED_VARIABLE_ATTRIBUTE)
00353       strcpy(_datagroupname4,MED_VARATR_NOM);
00354     else
00355       strcpy(_datagroupname4,MED_COOTRF_NOM);
00356 
00357     if ((_datagroup4 = _MEDdatagroupOuvrir(_datagroup,_datagroupname4)) < 0) {
00358       _n=0;
00359       goto SORTIE;
00360     }
00361   }
00362   if ( (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF ) )
00363     _datagroupf=_datagroup4;
00364   else
00365     _datagroupf=_datagroup;
00366 
00367 
00368   /*
00369    * Construction du nom du dataset à lire
00370    */
00371   if (  _MEDgetDatasetName(_datasetname,meddatatype,cmode) < 0) {
00372     MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetDatasetName");
00373     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00374     SSCRUTE(_datagroupname3);goto ERROR;
00375   }
00376 
00377   /*
00378    *  MAJ du champ transformation pour le (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF)
00379    */
00380   if (_datagroup4) {
00381     if ( _MEDattrEntierLire(_datagroup4,MED_NOM_CGT,&_transformation) < 0) {
00382       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00383       SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00384       SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);SSCRUTE(MED_NOM_CGT);
00385       goto ERROR;
00386     }
00387   }
00388 
00389   if ( (_dataset = _MEDdatasetOuvrir(_datagroupf,_datasetname)) < 0) {
00390     _n=0;_dataset=0;*transformation = (med_bool) MED_FALSE;
00391     if ( (numdt != MED_NO_DT) || (numit != MED_NO_IT) ) {
00392       MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,_datasetname);
00393       SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00394       SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);
00395       ISCRUTE_size(_n);
00396       goto ERROR;
00397     }
00398     goto SORTIE;
00399   }
00400 
00401 
00402   if (!_datagroup4) {
00403 
00404     /*
00405      * Lire l'attribut CGT pour savoir si le dataset a changé
00406      * n'a pas de sens si le dataset est en fait un lien vers le dataset précedent.
00407      * En testant si le dataset est un lien on détermine si un changement a eu lieu
00408      * depuis la séquence de calcul précédente.
00409      * Ce traitement ne doit pas être effectué pour le pas de temps initial et pour
00410      * (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF)
00411      */
00412 
00413     if ( _MEDisasoftlink(_datagroupf, _datasetname,MED_TRUE, &_isasoftlink ) < 0) {
00414       MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_LINK,_datasetname);
00415       SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00416       SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);
00417       ISCRUTE_size(_n);goto ERROR;
00418     }
00419 
00420     if (_isasoftlink)
00421       _transformation = MED_FALSE;
00422     else {
00423 
00424       if ( _MEDattrEntierLire(_dataset,MED_NOM_CGT,&_transformation) < 0) {
00425         MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00426         SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00427         SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT);
00428         goto ERROR;
00429       }
00430     }
00431 
00432   }
00433 
00434   *transformation = (med_bool) _transformation;
00435 
00436   if ( ( meddatatype == MED_CONNECTIVITY) && ( meddatatype == MED_COORDINATE ) ) {
00437     *transformation &= (med_bool) !_changement_s;
00438   }
00439 
00440   /*
00441    * Attribut PFL (nombre de noeuds ou d'elements)
00442    * la lecture est faite sur le datagroup _datagroup et non sur _datagroupf
00443    * pour (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF)
00444    */
00445   _profilearraysize = 0;
00446   profilename[0]='\0';
00447 
00448   if ( _MEDattrStringLire(_datagroup,MED_NOM_PFL,MED_NAME_SIZE,_profilename) < 0) {
00449     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00450     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00451     SSCRUTE(_datagroupname3); SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR;
00452   }
00453 
00454   if ( strcmp(_profilename,MED_NO_PROFILE_INTERNAL) ) {
00455     strncpy(profilename,_profilename,MED_NAME_SIZE+1);
00456     profilename[MED_NAME_SIZE]='\0';
00457 
00458     if ( ( _profilearraysize = MEDprofileSizeByName( fid,_profilename) ) < 0 ) {
00459       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,MED_ERR_MESH_MSG);
00460       SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00461       SSCRUTE(_profilename);SSCRUTE("MEDprofileSizeByName");goto ERROR;
00462     }
00463   }
00464   *profilesize=(med_int) _profilearraysize;
00465   
00466 
00467   /*
00468    * Attribut NBR (nombre d'entité)
00469    */
00470   if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,&_n) < 0) {
00471     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00472     SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00473     SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);
00474     SSCRUTE(_datasetname);SSCRUTE(MED_NOM_NBR);ISCRUTE_size(_n);goto ERROR;
00475   }
00476 
00477   if (_profilearraysize)
00478     switch(storagemode) {
00479 
00480     case MED_GLOBAL_PFLMODE :
00481       break;
00482 
00483     case MED_COMPACT_PFLMODE :
00484       if ( meddatatype!=MED_COORDINATE_TRSF )
00485         _n=_profilearraysize;
00486 
00487       break;
00488 
00489     default :
00490       MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_STORAGEMODE,MED_ERR_VALUE_MSG);
00491       ISCRUTE_int(storagemode);goto ERROR;
00492       break;
00493 
00494     }
00495 
00496  SORTIE:
00497 
00498   _ret = _n;
00499 
00500  ERROR:
00501 
00502 
00503   if (_dataset>0)     if (_MEDdatasetFermer(_dataset) < 0) {
00504     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COO);
00505     ISCRUTE_id(_dataset);
00506   }
00507 
00508   if (_datagroup4>0)     if (_MEDdatagroupFermer(_datagroup4) < 0) {
00509     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname4);
00510     ISCRUTE_id(_datagroup4);
00511   }
00512 
00513   if (_datagroup3>0)     if (_MEDdatagroupFermer(_datagroup3) < 0) {
00514     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname3);
00515     ISCRUTE_id(_datagroup3);
00516   }
00517 
00518   if (_datagroup2>0)     if (_MEDdatagroupFermer(_datagroup2) < 0) {
00519     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2);
00520     ISCRUTE_id(_datagroup2);
00521   }
00522 
00523   if (_datagroup1>0)     if (_MEDdatagroupFermer(_datagroup1) < 0) {
00524     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1);
00525     ISCRUTE_id(_datagroup1);
00526   }
00527 
00528   if (_meshid>0)            if (_MEDdatagroupFermer(_meshid) < 0) {
00529     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath);
00530     ISCRUTE_id(_meshid);
00531   }
00532 
00533 /*   _MEDobjetsOuverts(fid); */
00534 
00535   *fret = _ret;
00536   va_end(params);
00537   return;
00538 }

Généré le Mon May 16 17:10:22 2011 pour MED fichier par  doxygen 1.6.1