# MEDmeshComputationStepCr.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2012  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 #include <med.h>
    00020 #include <med_config.h>
    00021 #include <med_outils.h>
    00022 #include <string.h>
    00023 #include <stdlib.h>
    00024
    00039 med_err
    00040 MEDmeshComputationStepCr(const med_idt fid,
    00041                          const char * const meshname,
    00042                          const med_int numdt1,
    00043                          const med_int numit1,
    00044                          const med_int numdt2,
    00045                          const med_int numit2,
    00046                          const med_float dt2 )
    00047 {
    00048
    00049   med_access_mode _MED_ACCESS_MODE;
    00050   med_err  _ret=-1;
    00051   med_idt  _meshid=0,_datagroup1=0,_datagroup2=0,_datagroup3=0;
    00052   char     _meshpath [MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1]="";
    00053   char     _datagroupname [2*MED_MAX_PARA+1]="";
    00054   char     _datagroupname2[2*MED_MAX_PARA+1]="";
    00055   char     _datagroupname1bis[2*MED_MAX_PARA+1]="";
    00056   char     _latestcpstname[2*MED_MAX_PARA+1]="";
    00057   char*    _datagroupname1=_datagroupname;
    00058   char     _datagroupname3[2*MED_MAX_PARA+1]="";
    00059   char     _prevcpstname[2*MED_MAX_PARA+1]="";
    00060   char     _pathsrc[MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]="";
    00061   char     _pathdst[MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]="";
    00062   med_bool _datagroup1exist = MED_TRUE;
    00063   med_bool _isasupportmesh = MED_FALSE;
    00064   med_int  _nextdt=MED_NO_DT, _nextit=MED_NO_IT,_pvdt=MED_NO_DT, _pvit=MED_NO_IT;
    00065   med_int  _lastnumdt=MED_NO_DT, _lastnumit=MED_NO_IT;
    00066   med_int  _numdt1=numdt1,_numit1=numit1;
    00067   med_int  _false = 0;
    00068   med_sorting_type _sortingtype;
    00069   med_int          _intsortingtype;
    00070   /*
    00071    * On inhibe le gestionnaire d'erreur
    00072    */
    00073   _MEDmodeErreurVerrouiller();
    00074  if (_MEDcheckVersion30(fid) < 0) goto ERROR;
    00075
    00076   if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
    00077     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
    00078     goto ERROR;
    00079   }
    00080
    00081   if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
    00082     MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
    00083     ISCRUTE_int(_MED_ACCESS_MODE);
    00084     goto ERROR;
    00085   }
    00086
    00087 /*   strcat( _meshpath, meshname); */
    00088 /*   strcat( _pathsrc , meshname);strcat( _pathsrc , "/"); */
    00089 /*   strcat( _pathdst , meshname);strcat( _pathdst , "/"); */
    00090 /*   if ((_meshid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { */
    00091 /*     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_meshpath); */
    00092 /*     SSCRUTE(_meshid);goto ERROR; */
    00093 /*   } */
    00094
    00095   if ((_meshid=_MEDmeshDatagroupOpen(fid,meshname,_meshpath,&_isasupportmesh)) < 0) {
    00096     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
    00097     SSCRUTE(_meshpath); goto ERROR;
    00098   }
    00099   strcat( _pathsrc , _meshpath);strcat( _pathsrc , "/");
    00100   strcat( _pathdst , _meshpath);strcat( _pathdst , "/");
    00101
    00102   if ( _MEDattrEntierLire(_meshid,MED_NOM_NXT,&_lastnumdt) < 0) {
    00103 /*     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); */
    00104 /*     SSCRUTE(meshname);SSCRUTE(_meshpath);SSCRUTE(MED_NOM_NXT); */
    00105 /*     goto ERROR; */
    00106     _lastnumdt = MED_NO_DT;
    00107   }
    00108
    00109   if ( _MEDattrEntierLire(_meshid,MED_NOM_NXI,&_lastnumit) < 0) {
    00110 /*     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); */
    00111 /*     SSCRUTE(meshname);SSCRUTE(_meshpath);SSCRUTE(MED_NOM_NXI); */
    00112 /*     goto ERROR; */
    00113     _lastnumit = MED_NO_IT;
    00114   }
    00115
    00116  if ( _MEDattrEntierLire(_meshid,MED_NOM_SRT,&_intsortingtype) < 0) {
    00117    MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00118     SSCRUTE(meshname);SSCRUTE(MED_NOM_SRT);
    00119     ISCRUTE(_intsortingtype);goto ERROR;
    00120   }
    00121   _sortingtype = (med_sorting_type) (_intsortingtype);
    00122
    00123   _MEDgetComputationStepName(_sortingtype,numdt1,numit1,_datagroupname);
    00124   _MEDgetComputationStepName(_sortingtype,numdt2,numit2,_datagroupname2);
    00125   _MEDgetComputationStepName(_sortingtype,_lastnumdt,_lastnumit,_latestcpstname);
    00126
    00127   /*
    00128     L'utilisateur peut demander la création d'une nouvelle étape de calcul postérieure
    00129     à toutes les autres en indiquant (numdt1 == numdt2) && (numit1 == numit2)
    00130     Celà fonctionne aussi pour MED_NO_DT, NED_NO_IT
    00131   */
    00132
    00133   if ( (numdt1 == numdt2) && (numit1 == numit2) ) {
    00134     _numdt1         = _lastnumdt;
    00135     _numit1         = _lastnumit;
    00136     _datagroupname1 = _latestcpstname;
    00137   }
    00138   /*Vérifie que le _datagroupname2 est bien postérieur ou égal au _datagroupname1
    00139    REM: _datagroupname1 peut être la première/dernière séquence de calcul
    00140    ou une séquence intermédiaire */
    00141   if ( strncmp(_datagroupname2,_datagroupname1,2*MED_MAX_PARA+2) < 0) {
    00142     MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_COMPUTINGSTEP,_datagroupname2);
    00143     SSCRUTE(meshname);SSCRUTE(_datagroupname1);goto ERROR;
    00144   }
    00145
    00146   strcat( _pathsrc , _datagroupname1 );strcat( _pathsrc , "/");
    00147   strcat( _pathdst , _datagroupname2 );strcat( _pathdst , "/");
    00148
    00149   /* On accepte l'absence de _datagroupname1 uniquement si
    00150      numdt2 == MED_NO_DT && numit2 == MED_NO_IT */
    00151   if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) {
    00152     if ( (numdt2 != MED_NO_DT ) || (numit2 != MED_NO_IT) ) {
    00153       MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_COMPUTINGSTEP,_datagroupname1);
    00154       SSCRUTE(meshname);goto ERROR;
    00155       }
    00156   }
    00157
    00158   /*L'étape de calcul à créer ne doit pas déjà exister*/
    00159   if ( (_datagroup2 = _MEDdatagroupOuvrir(_meshid,_datagroupname2)) >= 0 ) {
    00160     MED_ERR_(_ret,MED_ERR_EXIST,MED_ERR_COMPUTINGSTEP,_datagroupname2);
    00161     SSCRUTE(meshname);goto ERROR;
    00162   }
    00163
    00164
    00165   if ( _datagroup1 > 0 ) {
    00166
    00167
    00168     /*Lecture NEXT et PREV du datagroup1 */
    00169     if ( _MEDattrEntierLire(_datagroup1,MED_NOM_NXT,&_nextdt) < 0) {
    00170       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00171       SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXT);
    00172       goto ERROR;
    00173     }
    00174
    00175     if ( _MEDattrEntierLire(_datagroup1,MED_NOM_NXI,&_nextit) < 0) {
    00176       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00177       SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXI);
    00178       goto ERROR;
    00179     }
    00180
    00181     /* On vérifie que la nouvelle étape de calcul s'insère correctement :
    00182        < au next du datagroup1 */
    00183 /*     if ( !((_nextdt == MED_NO_DT) && (_nextit == MED_NO_IT) )) { */
    00184     if ( (_nextdt != MED_NO_DT) || (_nextit != MED_NO_IT) ) {
    00185       _MEDgetComputationStepName(_sortingtype,_nextdt,_nextit,_datagroupname3);
    00186
    00187       if ( strncmp(_datagroupname3,_datagroupname2,2*MED_MAX_PARA+2) <= 0) {
    00188         MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_COMPUTINGSTEP,_datagroupname2);
    00189         SSCRUTE(meshname);SSCRUTE(_datagroupname3);goto ERROR;
    00190       }
    00191     }
    00192
    00193     /*On crée la nouvelle étape de calcul (au plus tard, après vérifs...)*/
    00194     if ((_datagroup2 = _MEDdatagroupCreer(_meshid,_datagroupname2)) < 0 ) {
    00195       MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2);
    00196       SSCRUTE(meshname);goto ERROR;
    00197     }
    00198
    00199     /*On crée les datagroups, attributs et liens sur les datatsets et les liens symboliques
    00200       pour avoir une image de l'étape de calcul précedente.*/
    00201     if ( _MEDvisit(fid,_pathsrc,_pathdst,(medvisitorfunc) _MEDlinkobjs ) < 0 ) {
    00202       MED_ERR_(_ret,MED_ERR_VISIT,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
    00203       SSCRUTE(meshname);SSCRUTE(_pathsrc);SSCRUTE(_pathdst);
    00204       goto ERROR;
    00205     }
    00206
    00207     /*Ecriture NEXT et PREV du nouveau datagroup2 */
    00208     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXT,&_nextdt) < 0) {
    00209       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00210       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXT);
    00211       goto ERROR;
    00212     }
    00213
    00214     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXI,&_nextit) < 0) {
    00215       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00216       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXI);
    00217       goto ERROR;
    00218     }
    00219
    00220
    00221     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVT,&_numdt1) < 0) {
    00222       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00223       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVT);
    00224       goto ERROR;
    00225     }
    00226
    00227     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVI,&_numit1) < 0) {
    00228       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00229       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVI);
    00230       goto ERROR;
    00231     }
    00232
    00233
    00234     /*Modification du NEXT du datagroup1 */
    00235     if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NXT,&numdt2) < 0) {
    00236       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00237       SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXT);
    00238       goto ERROR;
    00239     }
    00240
    00241     if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NXI,&numit2) < 0) {
    00242       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00243       SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXI);
    00244       goto ERROR;
    00245     }
    00246
    00247     /*Modification de PREV du ( NEXT de datagroup1 ) s'il existe*/
    00248     if (strlen(_datagroupname3) ) {
    00249
    00250       if ( (_datagroup3 = _MEDdatagroupOuvrir(_meshid,_datagroupname3)) < 0 ) {
    00251         MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_COMPUTINGSTEP,_datagroupname3);
    00252         SSCRUTE(meshname);goto ERROR;
    00253       }
    00254
    00255       if ( _MEDattrEntierLire(_datagroup3,MED_NOM_PVT,&_pvdt) < 0) {
    00256         MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00257         SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVT);
    00258         goto ERROR;
    00259       }
    00260
    00261       if ( _MEDattrEntierLire(_datagroup3,MED_NOM_PVI,&_pvit) < 0) {
    00262         MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00263         SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVI);
    00264         goto ERROR;
    00265       }
    00266       _MEDgetComputationStepName(_sortingtype,_pvdt,_pvit,_datagroupname1bis);
    00267
    00268       if ( strncmp(_datagroupname1,_datagroupname1bis,2*MED_MAX_PARA+2) != 0) {
    00269         MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_COMPUTINGSTEP,_datagroupname1);
    00270         SSCRUTE(meshname);SSCRUTE(_datagroupname1bis);goto ERROR;
    00271       }
    00272
    00273       if ( _MEDattributeIntWr(_datagroup3,MED_NOM_PVT,&numdt2) < 0) {
    00274         MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00275         SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVT);
    00276         goto ERROR;
    00277       }
    00278
    00279       if ( _MEDattributeIntWr(_datagroup3,MED_NOM_PVI,&numit2) < 0) {
    00280         MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00281         SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVI);
    00282         goto ERROR;
    00283       }
    00284
    00285     }
    00286
    00287   } else { /* Création de la première étape de calcul  */
    00288
    00289     /*On crée la nouvelle étape de calcul (au plus tard, après vérifs...) */
    00290     if ((_datagroup2 = _MEDdatagroupCreer(_meshid,_datagroupname2)) < 0 ) {
    00291       MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2);
    00292       SSCRUTE(meshname);goto ERROR;
    00293     }
    00294
    00295     /* Ecriture de MED_NO_IT, MED_NO_DT pour NEXT et PREV de la première
    00296        étape de calcul */
    00297     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXT,&numdt2) < 0) {
    00298       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00299       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXT);
    00300       goto ERROR;
    00301     }
    00302
    00303     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXI,&numit2) < 0) {
    00304       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00305       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXI);
    00306       goto ERROR;
    00307     }
    00308
    00309     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVT,&numdt2) < 0) {
    00310       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00311       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVT);
    00312       goto ERROR;
    00313     }
    00314
    00315     if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVI,&numit2) < 0) {
    00316       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00317       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVI);
    00318       goto ERROR;
    00319     }
    00320
    00321   }
    00322
    00323   /*Cree ou ouvre l'attribut MED_NOM_NDT pour écriture */
    00324   if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NDT,&numdt2) < 0) {
    00325     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00326     SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NDT);
    00327     ISCRUTE(numdt2);goto ERROR;
    00328   }
    00329
    00330   /*Cree ou ouvre l'attribut MED_NOM_PDT pour écriture */
    00331   if ( _MEDattrFloatEcrire(_datagroup2,MED_NOM_PDT,&dt2) < 0) {
    00332     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00333     SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PDT);
    00334     RSCRUTE(dt2);goto ERROR;
    00335   }
    00336
    00337   /*Cree ou ouvre l'attribut MED_NOM_NOR pour écriture */
    00338   if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NOR,&numit2) < 0) {
    00339     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00340     SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NOR);
    00341     ISCRUTE(numit2); goto ERROR;
    00342   }
    00343
    00344   /* Une nouvelle étape de calcul est vierge de toute modifiation*/
    00345   if ( _MEDattributeIntWr(_datagroup2,MED_NOM_CGT,&_false) < 0) {
    00346     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00347     SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT);
    00348     goto ERROR;
    00349   }
    00350
    00351
    00352   /* Ecriture de NEXT et PREV  au niveau meshid (dernière étape de calcul créée */
    00353   if ( strncmp(_datagroupname2,_latestcpstname,2*MED_MAX_PARA+2) >= 0) {
    00354
    00355     if ( _MEDattributeIntWr(_meshid,MED_NOM_NXT,&numdt2) < 0) {
    00356       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00357       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXT);
    00358       goto ERROR;
    00359     }
    00360
    00361     if ( _MEDattributeIntWr(_meshid,MED_NOM_NXI,&numit2) < 0) {
    00362       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
    00363       SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXI);
    00364       goto ERROR;
    00365     }
    00366   }
    00367
    00368   _ret = 0;
    00369  ERROR:
    00370
    00371   if (_datagroup3>0)     if (_MEDdatagroupFermer(_datagroup3) < 0) {
    00372     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname3);
    00373     ISCRUTE_id(_datagroup3);
    00374   }
    00375
    00376   if (_datagroup2>0)     if (_MEDdatagroupFermer(_datagroup2) < 0) {
    00377     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2);
    00378     ISCRUTE_id(_datagroup2);
    00379   }
    00380
    00381   if (_datagroup1>0)     if (_MEDdatagroupFermer(_datagroup1) < 0) {
    00382     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1);
    00383     ISCRUTE_id(_datagroup1);
    00384   }
    00385
    00386   if (_meshid>0)     if (_MEDdatagroupFermer(_meshid) < 0) {
    00387     MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath);
    00388     ISCRUTE_id(_meshid);
    00389   }
    00390
    00391   return _ret;
    00392 }