MAJ_236_300_mesh_datasets.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_config.h"
00020 #include "med_outils.h"
00021 #include <string.h>
00022 
00023 #include <2.3.6/med23v30.h>
00024 #include <2.3.6/med23v30_proto.h>
00025 #include "2.3.6/med23v30_misc.h"
00026 
00027 #include "MAJ_236_300.h"
00028 
00029 int MAJ_236_300_mesh_datasets(med_idt fid,
00030                               char * const _pathi,
00031                               char * const _pathf,
00032                               const char * const meshname,
00033                               const med_entity_type   enttype,
00034                               const med_geometry_type geotype)
00035 {
00036   med_err   _err=-1,_ret=-1;
00037   med_size _ndatasets=0;
00038   int      _itdataset=0;
00039   char     _idatasetname[MED_NAME_SIZE+1]="";
00040   med_int  _cgs=MED_FALSE;
00041   char     _savpathi[MED_TAILLE_MAA+MED_NAME_SIZE+1+2*MED_TAILLE_NOM_ENTITE+1+3+1]="";
00042   int      _itmplen=0;
00043   int      _ftmplen=0;
00044   med_int  _1 = 1, _nbratt=0,_nbtype=0;
00045 
00046   /*
00047    * Remarque : Cette procédure modifie le contenue des paramètres _pathi et pathf
00048    */
00049 
00050    _itmplen=strlen(_pathi);
00051    _ftmplen=strlen(_pathf);
00052 
00053   /*
00054    *  nombre de datasets (en 2.3.6, il ne peut pas y avoir de datagroup)
00055    */
00056   if ((_err=_MEDnObjects(fid,_pathi,&_ndatasets)) <0)
00057     if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) {
00058       MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_MESH,MED_MAA);
00059       goto ERROR;
00060     }
00061 
00062 
00063     for ( _itdataset=0; _itdataset < _ndatasets; ++_itdataset) {
00064 
00065       if ( _MEDobjectGetName(fid, _pathi,_itdataset, _idatasetname) < 0 ) {
00066         MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_pathi);ISCRUTE_int(_itdataset);
00067         goto ERROR;
00068       }
00069 
00070 /*       SSCRUTE(_idatasetname); */
00071 /*       SSCRUTE(_pathf); */
00072 /*       SSCRUTE(_pathi); */
00073 
00074       if ( strcmp(_idatasetname,MED_NOM_COR) &&
00075            strcmp(_idatasetname,MED_NOM_COO) &&
00076            strcmp(_idatasetname,MED_NOM_NOD) &&
00077            strcmp(_idatasetname,MED_NOM_DES) &&
00078            strcmp(_idatasetname,MED_NOM_IN1) &&
00079            strcmp(_idatasetname,MED_NOM_IN2) &&
00080            strcmp(_idatasetname,MED_NOM_IN3)  ) _cgs=MED_TRUE;
00081 
00082 
00083       /* Normalisation des noeuds */
00084       if ( (enttype == MED_NODE) && !strcmp(_idatasetname,MED_NOM_COO) ) {
00085         fprintf(stdout,"  >>> Normalisation des datasets sur les noeuds du maillage [%s] \n"
00086                 ,meshname);
00087         _pathi[_itmplen]='/';
00088         strcpy(&_pathi[_itmplen+1],_idatasetname);
00089         H5Adelete_by_name( fid, _pathi, MED_NOM_NOM, H5P_DEFAULT  );
00090         H5Adelete_by_name( fid, _pathi, MED_NOM_REP, H5P_DEFAULT  );
00091         H5Adelete_by_name( fid, _pathi, MED_NOM_UNI, H5P_DEFAULT  );
00092       }
00093 
00094       /* Normalisation des polygones */
00095       if ( (geotype == MED_POLYGON) && !strcmp(_idatasetname,MED_NOM_NOD) ) {
00096 
00097         fprintf(stdout,"  >>> Normalisation des datasets sur les entites [%s] du maillage [%s] \n",
00098                 MED_GET_ENTITY_TYPENAME[enttype+1],meshname);
00099 
00100         _pathi[_itmplen]='/';
00101         strcpy(&_pathi[_itmplen+1],_idatasetname);
00102 
00103         /*
00104          * Lecture puis supression de l'attribut MED_NOM_NBR sur le dataset MED_NOM_NOD
00105          */
00106         if ( _MEDattributeNumRdByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00107                                       ( unsigned char * const) &_nbratt ) < 0 ) {
00108           MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00109           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00110           goto ERROR;
00111         }
00112         H5Adelete_by_name( fid, _pathi, MED_NOM_NBR, H5P_DEFAULT  );
00113         H5Arename_by_name( fid, _pathi, MED_NOM_TAI, MED_NOM_NBR, H5P_DEFAULT);
00114 
00115         _pathi[_itmplen]='/';
00116         strcpy(&_pathi[_itmplen+1],MED_NOM_INN);
00117 /*      SSCRUTE(_pathf); */
00118 /*      SSCRUTE(_pathi); */
00119 
00120         /*
00121          * Creation/Ecriture de l'attribut MED_NOM_NBR sur le dataset MED_NOM_INN
00122          */
00123         ++_nbratt;
00124         if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00125                                       (const unsigned char * const) &_nbratt ) < 0 ) {
00126           MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00127           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00128           goto ERROR;
00129         }
00130 
00131       }
00132 
00133       /* Normalisation des polyèdres en connectivité descendante */
00134       if ( (geotype == MED_POLYHEDRON) && !strcmp(_idatasetname,MED_NOM_IFD) ) {
00135 
00136         fprintf(stdout,"  >>> Normalisation des datasets sur les entites [%s] du maillage [%s] \n",
00137                 MED_GET_ENTITY_TYPENAME[enttype+1],meshname);
00138 
00139         _pathi[_itmplen]='/';
00140         strcpy(_savpathi,_pathi);
00141 
00142         /*Renomme l'actuel IND en IND_*/
00143         strcpy(&_pathi[_itmplen+1],MED_NOM_IND);
00144         strcpy(&_savpathi[_itmplen+1],MED_NOM_IND);strcat(_savpathi,"_");
00145         H5Lmove(fid, _pathi, fid, _savpathi, H5P_DEFAULT, H5P_DEFAULT );
00146 
00147         /*Renomme l'actuel IFD en IND*/
00148         strcpy(&_pathi[_itmplen+1],MED_NOM_IFD);
00149         strcpy(&_savpathi[_itmplen+1],MED_NOM_IND);
00150         H5Lmove(fid, _pathi, fid, _savpathi, H5P_DEFAULT, H5P_DEFAULT );
00151         /*Renomme l' IND_ en IFD*/
00152         strcpy(&_pathi[_itmplen+1],MED_NOM_IND);strcat(_pathi,"_");
00153         strcpy(&_savpathi[_itmplen+1],MED_NOM_IFD);
00154         H5Lmove(fid, _pathi, fid, _savpathi, H5P_DEFAULT, H5P_DEFAULT );
00155 
00156         /* Lecture puis déplacement de l'attribut MED_NOM_NBR du dataset DES vers le dataset IND*/
00157         _pathi[_itmplen]='/';
00158         strcpy(&_pathi[_itmplen+1],MED_NOM_DES);
00159         if ( _MEDattributeNumRdByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00160                                       ( unsigned char * const) &_nbratt ) < 0 ) {
00161           MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00162           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00163           goto ERROR;
00164         }
00165         /* Lecture puis déplacement de l'attribut MED_NOM_TTI du dataset DES vers le dataset IFD*/
00166         if ( _MEDattributeNumRdByName(fid,_pathi,MED_NOM_TTI,MED_INTERNAL_INT,
00167                                       ( unsigned char * const) &_nbtype ) < 0 ) {
00168           MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00169           SSCRUTE(_pathi);SSCRUTE(MED_NOM_TTI);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00170           goto ERROR;
00171         }
00172         H5Adelete_by_name( fid, _pathi, MED_NOM_NBR, H5P_DEFAULT  );
00173         H5Adelete_by_name( fid, _pathi, MED_NOM_TTI, H5P_DEFAULT  );
00174         H5Arename_by_name( fid, _pathi, MED_NOM_TAI, MED_NOM_NBR, H5P_DEFAULT);
00175 
00176         /* Creation/Ecriture de l'attribut MED_NOM_NBR sur le dataset MED_NOM_IND */
00177         ++_nbratt;
00178         strcpy(&_pathi[_itmplen+1],MED_NOM_IND);
00179         if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00180                                       (const unsigned char * const) &_nbtype ) < 0 ) {
00181           MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00182           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00183           goto ERROR;
00184         }
00185 
00186         /* Creation/Ecriture de l'attribut MED_NOM_NBR sur le dataset MED_NOM_IFD */
00187         strcpy(&_pathi[_itmplen+1],MED_NOM_IFD);
00188         if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00189                                       (const unsigned char * const) &_nbratt ) < 0 ) {
00190           MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00191           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00192           goto ERROR;
00193         }
00194 
00195       }
00196 
00197       /* Normalisation des polyèdres en connectivité nodale */
00198       if ( (geotype == MED_POLYHEDRON) && !strcmp(_idatasetname,MED_NOM_IFN) ) {
00199 
00200         fprintf(stdout,"  >>> Normalisation des datasets sur les entites [%s] du maillage [%s] \n",
00201                 MED_GET_ENTITY_TYPENAME[enttype+1],meshname);
00202 
00203         _pathi[_itmplen]='/';
00204         strcpy(_savpathi,_pathi);
00205 
00206         /*Renomme l'actuel INN en INN_*/
00207         strcpy(&_pathi[_itmplen+1],MED_NOM_INN);
00208         strcpy(&_savpathi[_itmplen+1],MED_NOM_INN);strcat(_savpathi,"_");
00209         H5Lmove(fid, _pathi, fid, _savpathi, H5P_DEFAULT, H5P_DEFAULT );
00210 
00211         /*Renomme l'actuel IFN en INN*/
00212         strcpy(&_pathi[_itmplen+1],MED_NOM_IFN);
00213         strcpy(&_savpathi[_itmplen+1],MED_NOM_INN);
00214         H5Lmove(fid, _pathi, fid, _savpathi, H5P_DEFAULT, H5P_DEFAULT );
00215         /*Renomme l' INN_ en IFN*/
00216         strcpy(&_pathi[_itmplen+1],MED_NOM_INN);strcat(_pathi,"_");
00217         strcpy(&_savpathi[_itmplen+1],MED_NOM_IFN);
00218         H5Lmove(fid, _pathi, fid, _savpathi, H5P_DEFAULT, H5P_DEFAULT );
00219 
00220         /* Lecture puis déplacement de l'attribut MED_NOM_NBR du dataset NOD vers le dataset INN*/
00221         _pathi[_itmplen]='/';
00222         strcpy(&_pathi[_itmplen+1],MED_NOM_NOD);
00223         if ( _MEDattributeNumRdByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00224                                       ( unsigned char * const) &_nbratt ) < 0 ) {
00225           MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00226           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00227           goto ERROR;
00228         }
00229         /* Lecture puis déplacement de l'attribut MED_NOM_TTI du dataset NOD vers le dataset IFN*/
00230         if ( _MEDattributeNumRdByName(fid,_pathi,MED_NOM_TTI,MED_INTERNAL_INT,
00231                                       ( unsigned char * const) &_nbtype ) < 0 ) {
00232           MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00233           SSCRUTE(_pathi);SSCRUTE(MED_NOM_TTI);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00234           goto ERROR;
00235         }
00236         H5Adelete_by_name( fid, _pathi, MED_NOM_NBR, H5P_DEFAULT  );
00237         H5Adelete_by_name( fid, _pathi, MED_NOM_TTI, H5P_DEFAULT  );
00238         H5Arename_by_name( fid, _pathi, MED_NOM_TAI, MED_NOM_NBR, H5P_DEFAULT);
00239 
00240         /* Creation/Ecriture de l'attribut MED_NOM_NBR sur le dataset MED_NOM_INN */
00241         ++_nbratt;
00242         strcpy(&_pathi[_itmplen+1],MED_NOM_INN);
00243         if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00244                                       (const unsigned char * const) &_nbtype ) < 0 ) {
00245           MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00246           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00247           goto ERROR;
00248         }
00249 
00250         /* Creation/Ecriture de l'attribut MED_NOM_NBR sur le dataset MED_NOM_IFN */
00251         strcpy(&_pathi[_itmplen+1],MED_NOM_IFN);
00252         if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00253                                       (const unsigned char * const) &_nbratt ) < 0 ) {
00254           MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00255           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00256           goto ERROR;
00257         }
00258 
00259       }
00260 
00261       /* Normalisation des noms optionnels */
00262       if ( !strcmp(_idatasetname,MED_NOM_NOM) ) {
00263 
00264         fprintf(stdout,"  >>> Normalisation des noms optionnels sur les entites [%s] du maillage [%s] \n",
00265                 MED_GET_ENTITY_TYPENAME[enttype+1],meshname);
00266 
00267         _pathi[_itmplen]='/';
00268         strcpy(&_pathi[_itmplen+1],_idatasetname);
00269 
00270         /*
00271          * Lecture de l'attribut MED_NOM_NBR sur le dataset
00272          */
00273         if ( _MEDattributeNumRdByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00274                                       ( unsigned char * const) &_nbratt ) < 0 ) {
00275           MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00276           SSCRUTE(_pathi);SSCRUTE(MED_NOM_NBR);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00277           goto ERROR;
00278         }
00279 
00280         _pathi[_itmplen]='\0';
00281         
00282         MED_ERR_EXIT_IF( MAJ_236_300_string_datasets( fid, _pathi, _idatasetname,MED_TAILLE_PNOM,
00283                                                       MED_SNAME_SIZE,_nbratt)
00284                          < 0, MED_ERR_CALL, MED_ERR_API, "MAJ_236_300_string_datasets");
00285 
00286       }
00287 
00288       _pathi[_itmplen]='/';
00289       strcpy(&_pathi[_itmplen+1],_idatasetname);
00290 /*       SSCRUTE(_pathf); */
00291 /*       SSCRUTE(_pathi); */
00292 
00293       /*
00294        * Creation/Ecriture de l'attribut MED_NOM_CGT sur le dataset
00295        */
00296 
00297       if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_CGT,MED_INTERNAL_INT,
00298                                     (const unsigned char * const) &_1 ) < 0 ) {
00299         MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00300         SSCRUTE(_pathi);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00301         goto ERROR;
00302       }
00303 
00304       _pathi[_itmplen]='\0';
00305 
00306     }
00307 
00308     /*
00309      * Creation/Ecriture de l'attribut MED_NOM_CGS sur le datagroup
00310      */
00311     if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_CGS,MED_INTERNAL_INT,
00312                                   (const unsigned char * const) &_cgs ) < 0 ) {
00313       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00314       SSCRUTE(_pathi);SSCRUTE(MED_GET_ENTITY_TYPENAME[enttype+1]);
00315       SSCRUTE(MED_NOM_CGS);
00316       goto ERROR;
00317     }
00318 
00319 
00320   _ret=0;
00321  ERROR:
00322 
00323 /*   if (_datagroup>0) */
00324 /*     if (_MEDdatagroupFermer(_datagroup) < 0) { */
00325 /*       _pathi[_itmplen]='\0'; */
00326 /*       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_pathi); */
00327 /*     } */
00328 
00329 /*   if (_tmpnombuff ) free(_tmpnombuff); */
00330 
00331   return (int) _ret;
00332 }

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