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