00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022 #include <string.h>
00023 #include <stdlib.h>
00024
00025 med_err _MEDmeshAdvancedWr(const med_idt fid,
00026 const char* const meshname,
00027 const med_data_type meddatatype,
00028 const char* const datasetname,
00029 const med_internal_type datatype,
00030 const med_int numdt,
00031 const med_int numit,
00032 const med_float dt,
00033 const med_entity_type entitytype,
00034 const med_geometry_type geotype,
00035 const med_connectivity_mode cmode,
00036 const med_storage_mode storagemode,
00037 const char * const profilename,
00038 const med_switch_mode switchmode,
00039 const med_int dimselect,
00040 const med_filter * const filter,
00041 const med_int nbofentity,
00042 const void * const value)
00043 {
00044 med_access_mode _MED_ACCESS_MODE;
00045 med_err _ret=-1;
00046 med_idt _meshid=0, _elemid=0;
00047 med_idt _datagroup=0,_fdatagroup=0,_dataset=0;
00048 med_idt _datagroup1=0,_datagroup2=0,_datagroup3=0,_datagroup4=0;
00049
00050
00051
00052 char _meshpath [MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1]="";
00053 char _strpath [MED_TAILLE_STRCT+MED_NAME_SIZE+1]=MED_STRCT;
00054 char _datagroupname1 [2*MED_MAX_PARA+1]="";
00055 char _datagroupname2 [MED_TAILLE_NOM_ENTITE+1]="";
00056 char _datagroupname3 [MED_TAILLE_NOM_ENTITE+1]="";
00057 char _datagroupname4 [MED_NAME_SIZE+1]="";
00058 char _profilename [MED_NAME_SIZE+1]="";
00059 char _geotypename [MED_TAILLE_NOM_ENTITE+1]="";
00060 char _datasetname[MED_TAILLE_NOM_ENTITE+1]="";
00061 char _MED_NOM_COO[]=MED_NOM_COO, _MED_NOM_NOD[]=MED_NOM_NOD,_MED_NOM_DES[]=MED_NOM_DES;
00062 med_bool _profilehaschanged=MED_TRUE,_mustnothaveprofile=MED_FALSE;
00063 med_bool _filterparameterexist=MED_FALSE,copyfromprevious=MED_FALSE;
00064 med_bool _create_dataset = MED_TRUE;
00065
00066 med_filter * _filter = NULL;
00067 med_filter _tmpfilter = MED_FILTER_INIT;
00068 med_filter _paramfilter = MED_FILTER_INIT;
00069 med_int _nbofconstituentpervalue=0,_spacedim=0;
00070 med_sorting_type _sortingtype=0;
00071 med_int _intsortingtype=0;
00072 med_int _false=0,_true=1,_not_the_first_cstp=_false;
00073
00074 med_internal_type _datatype=datatype;
00075 med_int _nbofvalueperentity=0;
00076 med_int _nbofentity=0;
00077 med_int _intmeshtype=0;
00078 med_int _medintgeotype = geotype;
00079 med_geometry_type _sgeotype = MED_NONE;
00080 med_int _medintsgeotype= MED_NONE;
00081 med_bool _chgt=MED_FALSE,_trsf=MED_FALSE;
00082 med_bool _isasupportmesh=MED_FALSE;
00083 char _supportmeshname[MED_NAME_SIZE+1]="";
00084
00085 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00086
00087 if (filter) {
00088 _filter=(med_filter*)(filter); _filterparameterexist=MED_TRUE;
00089 }
00090 else {
00091 _filter=&_tmpfilter;
00092 (*_filter).nbofentity = nbofentity;
00093 (*_filter).nbofvaluesperentity = 1;
00094
00095 (*_filter).constituentselect = dimselect;
00096 (*_filter).switchmode = switchmode;
00097 (*_filter).storagemode = storagemode;
00098 strcpy((*_filter).profilename,profilename);
00099
00100 }
00101
00102
00103
00104
00105 _MEDmodeErreurVerrouiller();
00106
00107 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00108 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00109 goto ERROR;
00110 }
00111
00112 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00113 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00114 ISCRUTE_int(_MED_ACCESS_MODE);
00115 goto ERROR;
00116 }
00117
00118
00119
00120
00121
00122
00123 if ((_meshid=_MEDmeshDatagroupOpen(fid,meshname,_meshpath,&_isasupportmesh)) < 0) {
00124 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00125 SSCRUTE(_meshpath); goto ERROR;
00126 }
00127
00128
00129 if (_MEDattrEntierLire(_meshid,MED_NOM_ESP,&_spacedim) < 0) {
00130 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00131 SSCRUTE(meshname);SSCRUTE(MED_NOM_ESP);ISCRUTE(_spacedim);goto ERROR;
00132 }
00133
00134
00135 if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) {
00136 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00137 SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR;
00138 }
00139
00140
00141 if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) _mustnothaveprofile=MED_TRUE;
00142
00143
00144
00145 if ( entitytype == MED_STRUCT_ELEMENT ) {
00146 if ( MEDstructElementName(fid, geotype,_geotypename) < 0 ) {
00147 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDstructElementName");
00148 ISCRUTE_int(geotype);goto ERROR;
00149 }
00150
00151 if (meddatatype != MED_VARIABLE_ATTRIBUTE) {
00152
00153 strcat(_strpath,_geotypename);
00154
00155
00156
00157
00158 if ((_elemid = _MEDdatagroupOpen(fid,_strpath)) < 0) {
00159 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_strpath);
00160 goto ERROR;
00161 }
00162
00163
00164
00165
00166
00167 if ( _MEDattrStringLire(_elemid,MED_NOM_NOM,MED_NAME_SIZE,_supportmeshname) < 0) {
00168 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_strpath);
00169 SSCRUTE(MED_NOM_NOM);SSCRUTE(_supportmeshname);
00170 goto ERROR;
00171 }
00172
00173
00174
00175
00176 if ( _MEDattrEntierLire(_elemid,MED_NOM_GEO,&_medintsgeotype) < 0 ) {
00177 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_strpath);
00178 SSCRUTE(MED_NOM_GEO);ISCRUTE(_medintsgeotype);
00179 goto ERROR;
00180 }
00181 _sgeotype = _medintsgeotype;
00182
00183 if (strlen(_supportmeshname) )
00184 if ( (_nbofvalueperentity = MEDmeshnEntity(fid,_supportmeshname,MED_NO_DT,MED_NO_IT,
00185 MED_CELL,_sgeotype,MED_CONNECTIVITY,MED_NODAL,
00186 &_chgt,&_trsf) ) < 0) {
00187 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity");
00188 ISCRUTE(_nbofvalueperentity);goto ERROR;
00189 }
00190
00191 if (!_nbofvalueperentity) _nbofvalueperentity=1;
00192
00193
00194
00195
00196
00197
00198 if (!_nbofconstituentpervalue) _nbofconstituentpervalue=1;
00199
00200 }
00201 }
00202
00203 if (meddatatype == MED_VARIABLE_ATTRIBUTE) {
00204 if ( MEDstructElementVarAttInfoByName(fid,
00205 _geotypename,
00206 datasetname,
00207 (med_attribute_type* const) &_datatype,
00208 &_nbofconstituentpervalue
00209 ) < 0) {
00210 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDstructElementVarAttInfoByName");
00211 ISCRUTE_int(geotype);SSCRUTE(datasetname);
00212 ISCRUTE_int(_datatype);ISCRUTE(_nbofconstituentpervalue);goto ERROR;
00213 }
00214 _nbofvalueperentity=1;
00215 }
00216
00217
00218
00219
00220
00221
00222 if ( !strlen(datasetname) ) {
00223 if ( _MEDgetDatasetName( _datasetname, meddatatype, cmode ) < 0 ) {
00224 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetDatasetname");
00225 ISCRUTE_int(meddatatype);ISCRUTE_int(cmode);SSCRUTE( _datasetname);goto ERROR;
00226 }
00227 } else
00228 strncpy(_datasetname,datasetname,MED_TAILLE_NOM_ENTITE+1);
00229
00230
00231
00232
00233
00234 if ( _datatype == MED_INTERNAL_UNDEF)
00235 if ( _MEDgetDatatype( &_datatype, meddatatype, cmode ) < 0 ) {
00236 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetDatatype");
00237 ISCRUTE_int(meddatatype);ISCRUTE_int(cmode);ISCRUTE_int(_datatype);goto ERROR;
00238 }
00239
00240
00241
00242
00243
00244 if ( meddatatype != MED_UNDEF_DATATYPE )
00245 if ( _MEDmeshtypeCompatibility(meddatatype, _intmeshtype) < 0) {
00246 MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_MEDDATATYPE,MED_ERR_VALUE_MSG);
00247 ISCRUTE_int(meddatatype);ISCRUTE(_intmeshtype);goto ERROR;
00248 }
00249
00250 if ( ! (_nbofvalueperentity && _nbofconstituentpervalue) )
00251 if ( _MEDgetDatasetParameter( meddatatype, _spacedim, entitytype, geotype, cmode,
00252 &_nbofvalueperentity,&_nbofconstituentpervalue) < 0 ) {
00253 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetDatasetParameter");
00254 ISCRUTE_int(meddatatype);ISCRUTE_int(cmode);ISCRUTE(_nbofvalueperentity);
00255 ISCRUTE(_nbofconstituentpervalue);goto ERROR;
00256 }
00257
00258
00259
00260 if (_filterparameterexist) {
00261 if ((*_filter).nbofconstituentpervalue != _nbofconstituentpervalue ) {
00262 MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_VALUE_MSG);
00263 ISCRUTE((*_filter).nbofconstituentpervalue); ISCRUTE(_nbofconstituentpervalue );
00264 goto ERROR;
00265 }
00266 if ((*_filter).nbofvaluesperentity != _nbofvalueperentity ) {
00267 MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_VALUE_MSG);
00268 ISCRUTE((*_filter).nbofvaluesperentity); ISCRUTE(_nbofvalueperentity );
00269 goto ERROR;
00270 }
00271 } else {
00272 (*_filter).nbofconstituentpervalue = _nbofconstituentpervalue;
00273 (*_filter).nbofvaluesperentity = _nbofvalueperentity;
00274 }
00275
00276
00277
00278
00279
00280 if ( _MEDattrEntierLire(_meshid,MED_NOM_SRT,&_intsortingtype) < 0) {
00281 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00282 SSCRUTE(meshname);SSCRUTE(MED_NOM_SRT);ISCRUTE(_intsortingtype);goto ERROR;
00283 }
00284 _sortingtype = (med_sorting_type) (_intsortingtype);
00285
00286 _MEDgetComputationStepName(_sortingtype,numdt,numit,_datagroupname1);
00287
00288 if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) {
00289 if ( MEDmeshComputationStepCr(fid,meshname,numdt,numit,numdt,numit,dt) < 0 ) {
00290 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_COMPUTINGSTEP,MED_ERR_MESH_MSG);
00291 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);goto ERROR;
00292 } else {
00293
00294 if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) {
00295 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00296 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00297 SSCRUTE(_datagroupname1);ISCRUTE_id(_datagroup1);goto ERROR;
00298 }
00299
00300 if ( (numdt != MED_NO_DT) || (numit != MED_NO_IT) ) copyfromprevious=MED_TRUE;
00301 }
00302 }
00303
00304
00305
00306
00307
00308
00309 if (_MEDgetEntityTypeName(_datagroupname2,entitytype) < 0) {
00310 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG);
00311 ISCRUTE_int(entitytype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);goto ERROR;
00312 }
00313
00314 if ((_datagroup2 = _MEDdatagroupOuvrir(_datagroup1,_datagroupname2)) < 0) {
00315 if ( copyfromprevious) {
00316 MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00317 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00318 goto ERROR;
00319 } else {
00320 if ((_datagroup2 = _MEDdatagroupCreer(_datagroup1,_datagroupname2)) < 0 ) {
00321 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00322 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00323 goto ERROR;
00324 }
00325 }
00326 }
00327
00328
00329
00330
00331
00332
00333 if ( entitytype != MED_NODE ) {
00334
00335 if (strlen(_geotypename))
00336 strncpy(_datagroupname3,_geotypename,MED_NAME_SIZE+1);
00337 else
00338 if ( _MEDgetGeometryTypeName(_datagroupname3,geotype) < 0) {
00339 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG);
00340 ISCRUTE_int(geotype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00341 SSCRUTE(_datagroupname2);goto ERROR;
00342 }
00343
00344 if ((_datagroup3 = _MEDdatagroupOuvrir(_datagroup2,_datagroupname3)) < 0) {
00345 if ( copyfromprevious) {
00346 MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00347 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00348 SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);goto ERROR;
00349 } else {
00350 if ((_datagroup3 = _MEDdatagroupCreer(_datagroup2,_datagroupname3)) < 0 ) {
00351 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00352 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00353 SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);goto ERROR;
00354 }
00355 }
00356 }
00357 }
00358
00359 if (_datagroup3) _datagroup=_datagroup3; else _datagroup=_datagroup2;
00360
00361
00362
00363
00364
00365 if ( (meddatatype == MED_VARIABLE_ATTRIBUTE) || (meddatatype == MED_COORDINATE_TRSF) ) {
00366
00367
00368
00369 if (meddatatype == MED_VARIABLE_ATTRIBUTE)
00370 strcpy(_datagroupname4,MED_VARATR_NOM);
00371 else
00372 strcpy(_datagroupname4,MED_COOTRF_NOM);
00373 if ((_datagroup4 = _MEDdatagroupOuvrir(_datagroup,_datagroupname4)) < 0) {
00374 if ( copyfromprevious) {
00375 MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00376 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00377 SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);goto ERROR;
00378 } else {
00379 if ((_datagroup4 = _MEDdatagroupCreer(_datagroup,_datagroupname4)) < 0 ) {
00380 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00381 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00382 SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);goto ERROR;
00383 }
00384 }
00385 }
00386 }
00387 if (_datagroup4) _fdatagroup=_datagroup4; else _fdatagroup=_datagroup;
00388
00389
00390
00391
00392
00393 if ( !strncmp((*_filter).profilename,MED_SAME_PROFILE_INTERNAL,MED_NAME_SIZE+1) ) {
00394 if ( _MEDattrStringLire(_datagroup,MED_NOM_PFL,MED_NAME_SIZE,_profilename) < 0) {
00395 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00396 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00397 SSCRUTE(_datagroupname3); SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR;
00398 }
00399 if ( strncmp(_profilename,MED_NO_PROFILE_INTERNAL,MED_NAME_SIZE+1) )
00400 strncpy((*_filter).profilename,_profilename,MED_NAME_SIZE+1);
00401 else
00402 (*_filter).profilename[0]='\0';
00403
00404 _profilehaschanged = MED_FALSE;
00405 }
00406
00407 if ( _mustnothaveprofile && strlen((*_filter).profilename) ) {
00408 MED_ERR_(_ret,MED_ERR_NULL,MED_ERR_PROFILE,MED_ERR_MESH_MSG);
00409 SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);
00410 SSCRUTE((*_filter).profilename);goto ERROR;
00411 }
00412
00413 if ( strlen((*_filter).profilename) == 0 ) {
00414 strncpy(_profilename,MED_NO_PROFILE_INTERNAL,MED_NAME_SIZE+1);
00415 } else {
00416 strncpy(_profilename,(*_filter).profilename,MED_NAME_SIZE+1);
00417 _profilename[MED_NAME_SIZE]='\0';
00418 }
00419
00420
00421 if (!_filterparameterexist) {
00422
00423 #ifdef _DEBUG_
00424 ISCRUTE((*_filter).nbofentity );
00425 ISCRUTE((*_filter).nbofvaluesperentity );
00426 ISCRUTE((*_filter).nbofconstituentpervalue );
00427 ISCRUTE((*_filter).constituentselect );
00428 ISCRUTE_int((*_filter).switchmode );
00429 ISCRUTE((*_filter).filterarraysize );
00430 ISCRUTE((*_filter).profilearraysize );
00431 ISCRUTE_int((*_filter).storagemode );
00432 SSCRUTE((*_filter).profilename );
00433 #endif
00434
00435 if ( MEDfilterEntityCr(fid, (*_filter).nbofentity, (*_filter).nbofvaluesperentity,
00436 (*_filter).nbofconstituentpervalue, (*_filter).constituentselect,
00437 (*_filter).switchmode, (*_filter).storagemode,
00438 (*_filter).profilename, MED_UNDEF_SIZE, NULL, &_paramfilter) < 0 ) {
00439 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG);
00440 goto ERROR;
00441 }
00442 _filter = &_paramfilter;
00443 }
00444
00445 #ifdef _DEBUG_
00446 ISCRUTE((*_filter).nbofentity );
00447 ISCRUTE((*_filter).nbofvaluesperentity );
00448 ISCRUTE((*_filter).nbofconstituentpervalue );
00449 ISCRUTE((*_filter).constituentselect );
00450 ISCRUTE_int((*_filter).switchmode );
00451 ISCRUTE((*_filter).filterarraysize );
00452 ISCRUTE((*_filter).profilearraysize );
00453 ISCRUTE_int((*_filter).storagemode );
00454 SSCRUTE((*_filter).profilename );
00455 #endif
00456
00457
00458 _not_the_first_cstp=_true;
00459
00460
00461
00462
00463 if ( ( meddatatype == MED_CONNECTIVITY) && (!strcmp(_geotypename,"MED_PARTICLE")) ) {
00464 _nbofentity = (*_filter).nbofentity;
00465 (*_filter).nbofentity= 0;
00466 }
00467
00468
00469
00470
00471
00472 if (_create_dataset)
00473 if ( _MEDdatasetWr(_fdatagroup,_datasetname,_datatype,_filter,value) < 0) {
00474 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,_datasetname);
00475 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);
00476 SSCRUTE(_profilename);goto ERROR;
00477 }
00478
00479 if ( ( meddatatype == MED_CONNECTIVITY) && (!strcmp(_geotypename,"MED_PARTICLE")) ) {
00480 (*_filter).nbofentity= _nbofentity;
00481 }
00482
00483
00484
00485
00486
00487 if (_profilehaschanged)
00488 if ( _MEDattributeStringWr(_datagroup,MED_NOM_PFL,MED_NAME_SIZE,_profilename) < 0) {
00489 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00490 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);
00491 SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR;
00492 }
00493
00494
00495
00496
00497 if ( entitytype != MED_NODE )
00498 if ( _MEDattributeIntWr(_datagroup,MED_NOM_GEO,&_medintgeotype) < 0 ) {
00499 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00500 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);
00501 SSCRUTE(MED_NOM_PFL);SSCRUTE(MED_NOM_GEO);ISCRUTE(_medintgeotype);
00502 goto ERROR;
00503 }
00504
00505
00506
00507
00508 if (_create_dataset) {
00509
00510 if ((_dataset = _MEDdatasetOuvrir(_fdatagroup,_datasetname)) < 0) {
00511 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,_datasetname);
00512 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);
00513 SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);goto ERROR;
00514 }
00515
00516 if ( _MEDattributeIntWr(_dataset,MED_NOM_NBR,&((*_filter).nbofentity)) < 0) {
00517 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00518 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);
00519 SSCRUTE(MED_NOM_NBR);ISCRUTE((*_filter).nbofentity);goto ERROR;
00520 }
00521 }
00522
00523
00524
00525
00526 if ( _MEDattributeIntWr(_datagroup1,MED_NOM_CGT,&_not_the_first_cstp) < 0) {
00527 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00528 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(MED_NOM_CGT);
00529 goto ERROR;
00530 }
00531
00532 if ( _MEDattributeIntWr(_datagroup2,MED_NOM_CGT,&_not_the_first_cstp) < 0) {
00533 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00534 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00535 SSCRUTE(MED_NOM_CGT);goto ERROR;
00536 }
00537
00538 if (_datagroup3)
00539 if ( _MEDattributeIntWr(_datagroup3,MED_NOM_CGT,&_not_the_first_cstp) < 0) {
00540 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00541 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00542 SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT);goto ERROR;
00543 }
00544
00545
00546 if ( ( meddatatype != MED_CONNECTIVITY) && ( meddatatype != MED_COORDINATE )
00547 &&(meddatatype != MED_COORDINATE_AXIS1)&&(meddatatype != MED_COORDINATE_AXIS2)
00548 &&(meddatatype != MED_COORDINATE_AXIS3)&&(meddatatype != MED_INDEX_FACE)
00549 && (meddatatype != MED_INDEX_NODE)
00550 ) {
00551 if ( _MEDattributeIntWr(_datagroup,MED_NOM_CGS,&_not_the_first_cstp) < 0) {
00552 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00553 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00554 SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGS);goto ERROR;
00555 }
00556 } else
00557 if ( _MEDattributeIntWr(_datagroup,MED_NOM_CGS,&_false) < 0) {
00558 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00559 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00560 SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGS);goto ERROR;
00561 }
00562
00563 if (_datagroup4)
00564 if ( _MEDattributeIntWr(_datagroup4,MED_NOM_CGT,&_not_the_first_cstp) < 0) {
00565 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00566 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00567 SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);SSCRUTE(MED_NOM_CGT);
00568 goto ERROR;
00569 }
00570
00571 if (_create_dataset)
00572 if ( _MEDattributeIntWr(_dataset,MED_NOM_CGT,&_not_the_first_cstp) < 0) {
00573 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00574 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);
00575 SSCRUTE(_datagroupname3);SSCRUTE(datasetname);SSCRUTE(MED_NOM_CGT);goto ERROR;
00576 }
00577
00578 _ret = 0;
00579
00580 ERROR:
00581
00582 if (!_filterparameterexist) {
00583 if ( MEDfilterClose(_filter) < 0 ) {
00584 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_MESH_MSG);
00585 SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);
00586 SSCRUTE(_profilename);goto ERROR;
00587 }
00588 }
00589
00590 if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) {
00591 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COO);
00592 ISCRUTE_id(_dataset);
00593 }
00594
00595 if (_datagroup4>0) if (_MEDdatagroupFermer(_datagroup4) < 0) {
00596 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_VARATR_NOM);
00597 ISCRUTE_id(_datagroup4);
00598 }
00599
00600 if (_datagroup3>0) if (_MEDdatagroupFermer(_datagroup3) < 0) {
00601 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_profilename);
00602 ISCRUTE_id(_datagroup3);
00603 }
00604
00605 if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) {
00606 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2);
00607 ISCRUTE_id(_datagroup2);
00608 }
00609
00610 if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) {
00611 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1);
00612 ISCRUTE_id(_datagroup1);
00613 }
00614
00615 if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) {
00616 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath);
00617 ISCRUTE_id(_meshid);
00618 }
00619
00620 if (_elemid>0) if (_MEDdatagroupFermer(_elemid) < 0) {
00621 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_geotypename);
00622 ISCRUTE_id(_elemid);
00623 }
00624
00625
00626 return _ret;
00627 }
00628