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 }