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 }

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