# MAJ_236_300_mesh_datasets.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2012  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 }