00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
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 
00048 
00049 
00050    _itmplen=strlen(_pathi);
00051    _ftmplen=strlen(_pathf);
00052 
00053   
00054 
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 
00071 
00072 
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       
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       
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 
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 
00118 
00119 
00120         
00121 
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       
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         
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         
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         
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         
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         
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         
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         
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       
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         
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         
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         
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         
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         
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         
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         
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       
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 
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 
00291 
00292 
00293       
00294 
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 
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 
00324 
00325 
00326 
00327 
00328 
00329 
00330 
00331   return (int) _ret;
00332 }