med_err MEDparameterComputationStepInfo(const med_idt fid, const char * const paramname, const int csit, med_int * const numdt, med_int * const numit, med_float * const dt ) { med_err _ret = -1, _err = -1; med_idt _cpstidt = 0; char _path[(MED_TAILLE_NUM_DATA+MED_NAME_SIZE+1)+2*MED_MAX_PARA+1]=MED_NUM_DATA; int _num=csit-1; char _cstpname[2*MED_MAX_PARA+1]=""; _MEDmodeErreurVerrouiller(); /* On recupere le nom du pas de temps */ strcat(_path, paramname); if ( _MEDobjectGetName(fid, _path ,_num, _cstpname) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path);ISCRUTE_int(_num); goto ERROR; } /* on ouvre le groupe HDF correspondant */ strcat(_path,"/"); strcat(_path,_cstpname); if ((_cpstidt = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* Lecture des attributs */ if (_MEDattrEntierLire(_cpstidt, MED_NOM_NDT, (med_int*) numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NDT); SSCRUTE(_path);ISCRUTE(*numdt);goto ERROR; } if (_MEDattrFloatLire(_cpstidt, MED_NOM_PDT, (med_float*) dt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_PDT); SSCRUTE(_path);RSCRUTE(*dt);goto ERROR; } if (_MEDattrEntierLire(_cpstidt, MED_NOM_NOR, (med_int*) numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NOR); SSCRUTE(_path);ISCRUTE(*numit);goto ERROR; } _ret = 0; ERROR: /* on ferme tout */ if (_cpstidt > 0) if (_MEDdatagroupFermer(_cpstidt) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_cpstidt); } return _ret; }
void _MEDfield23ComputingStepMeshInfo236(int dummy,...) { med_err _ret=-1,_err=0; med_size _num,_nmesh=0; med_idt _datagroup1=0,_meshgid=0,_linkgid=0; char _datagroupname1[2*MED_MAX_PARA+1] =""; char _ent_geo [2*MED_TAILLE_NOM_ENTITE+2]=""; char _path [(MED_TAILLE_CHA+MED_TAILLE_NOM+1)+ (2*MED_TAILLE_NOM_ENTITE+1)+1+(2*MED_MAX_PARA)+1]=MED_CHA; char _meshpath [MED_TAILLE_MAA+MED_TAILLE_NOM+1]=MED_MAA; char _linkpath [MED_TAILLE_LIENS+MED_TAILLE_NOM+1]=MED_LIENS; med_size _ncpst=0; med_bool _checkmultiplemesh=MED_TRUE, _multiplemesh =MED_FALSE; med_bool _checkmeshname =MED_TRUE, _samedefaultmeshname=MED_FALSE; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, int , , csit ); MED_VARGS_DECL(, med_int *, const , numdt ); MED_VARGS_DECL(, med_int *, const , numit ); MED_VARGS_DECL(, med_float *, const , dt ); MED_VARGS_DECL(, med_int *, const , nmesh ); MED_VARGS_DECL(, char *, const , meshname ); MED_VARGS_DECL(, med_bool *, const , localmesh ); MED_VARGS_DECL(, med_int *, const , meshnumdt ); MED_VARGS_DECL(, med_int *, const , meshnumit ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, int , , csit ); MED_VARGS_DEF(, med_int *, const , numdt ); MED_VARGS_DEF(, med_int *, const , numit ); MED_VARGS_DEF(, med_float *, const , dt ); MED_VARGS_DEF(, med_int *, const , nmesh ); MED_VARGS_DEF(, char *, const , meshname ); MED_VARGS_DEF(, med_bool *, const , localmesh ); MED_VARGS_DEF(, med_int *, const , meshnumdt ); MED_VARGS_DEF(, med_int *, const , meshnumit ); MED_VARGS_DEF(, med_err * ,, fret ); _num=csit-1; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * On construit le nom du datagroup */ strcat(_path,fieldname); /* if ( _MEDfieldComputingStepCheck236(fid, fieldname, */ /* &_ncpst, */ /* _checkmultiplemesh, &_multiplemesh, */ /* _checkmeshname, &_samedefaultmeshname) < 0) { */ /* MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_FIELD,fieldname); */ /* goto ERROR; */ /* } */ /* * On suppose que le modèle 2.3.6 est respecté : * Il y a les mêmes séquences de calcul pour tous les couples * (typent,typegeo). Autrement dit selon l'utilisation de l'API 2.3.6 : * A chaque séquence de calcul, on utilise le même ensemble de (typent,typegeo). * En conséquence si l'on fixe le (typeent,typegeo) les séquences * de calcul que l'on va trouver seront représentatives de celles * présentent dans tous les (typent,typegeo) utilisés. */ if ( _MEDobjectGetName(fid, _path ,0, _ent_geo) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path); SSCRUTE(_path); SSCRUTE(_ent_geo); goto ERROR; } strcat(_path,"/"); strcat(_path,_ent_geo); if ( _MEDobjectGetName(fid, _path ,_num, _datagroupname1) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path); SSCRUTE(_path); SSCRUTE(_ent_geo); goto ERROR; } strcat(_path,"/"); strcat(_path,_datagroupname1); if ((_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* * Lecture des attributs */ if (_MEDattrEntierLire(_datagroup1,MED_NOM_NDT,(med_int*) numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NDT); SSCRUTE(_path);ISCRUTE(*numdt);goto ERROR; } if (_MEDattrFloatLire(_datagroup1,MED_NOM_PDT,(med_float*) dt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_PDT); SSCRUTE(_path);RSCRUTE(*dt);goto ERROR; } if (_MEDattrEntierLire(_datagroup1,MED_NOM_NOR,(med_int*) numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NOR); SSCRUTE(_path);ISCRUTE(*numit);goto ERROR; } if (_MEDattrStringLire(_datagroup1,MED_NOM_MAI,MED_TAILLE_NOM,meshname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_MAI); SSCRUTE(_path);SSCRUTE(meshname);goto ERROR; } /* Nombre de maillages * La gestion d'une incohérence sur le nombre de séquences de calcul par couple (entitytype,geotype) * se fait à partir des appels : * MEDfieldnProfile,MEDfieldnValue* * La vérification complémentaire que l'ensemble des maillages utilisés sont les mêmes pour toutes les séquences * de calcul identiques est effectué dans MEDfield23nValue */ if ( (_err=_MEDnObjects(_datagroup1,".",&_nmesh)) <0) if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_path); goto ERROR; } *nmesh = (med_int) _nmesh; /* Maillage local ou distant */ strcat(_meshpath,meshname); /* Le maillage est il distant */ if ( (_meshgid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { /* Verifie que le maillage est bien référencé comme distant */ strcat(_linkpath,meshname); if ((_linkgid = _MEDdatagroupOuvrir(fid,_linkpath)) < 0) { /* MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_MESH,MED_ERR_FIELD_MSG); */ /* SSCRUTE(fieldname);SSCRUTE(_meshpath);SSCRUTE(_linkpath); */ /* goto ERROR; */ *localmesh = MED_FALSE; } *localmesh = MED_FALSE; } else *localmesh = MED_TRUE; *meshnumdt=MED_NO_DT; *meshnumit=MED_NO_IT; _ret = 0; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_datagroup1); } if (_meshgid>0) if (_MEDdatagroupFermer(_meshgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshgid); } if (_linkgid>0) if (_MEDdatagroupFermer(_linkgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_linkpath); ISCRUTE_id(_linkgid); } va_end(params); *fret = _ret; return; }
void _MEDfield23ComputingStepMeshInfo30(int dummy,...) { med_err _ret=-1; med_idt _gid=0,_datagroup1=0,_meshgid=0,_linkgid=0; int _num; char _datagroupname1[2*MED_MAX_PARA+1]=""; char _path [(MED_FIELD_GRP_SIZE+MED_NAME_SIZE+1)+2*MED_MAX_PARA+1]=MED_FIELD_GRP; char _meshpath [MED_MESH_GRP_SIZE+MED_NAME_SIZE+1]=MED_MESH_GRP; char _linkpath [MED_TAILLE_LIENS+MED_NAME_SIZE+1]=MED_LIENS; char _cstpname[2*MED_MAX_PARA+1]=""; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, int , , csit ); MED_VARGS_DECL(, med_int *, const , numdt ); MED_VARGS_DECL(, med_int *, const , numit ); MED_VARGS_DECL(, med_float *, const , dt ); MED_VARGS_DECL(, med_int *, const , nmesh ); MED_VARGS_DECL(, char *, const , meshname ); MED_VARGS_DECL(, med_bool *, const , localmesh ); MED_VARGS_DECL(, med_int *, const , meshnumdt ); MED_VARGS_DECL(, med_int *, const , meshnumit ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, int , , csit ); MED_VARGS_DEF(, med_int *, const , numdt ); MED_VARGS_DEF(, med_int *, const , numit ); MED_VARGS_DEF(, med_float *, const , dt ); MED_VARGS_DEF(, med_int *, const , nmesh ); MED_VARGS_DEF(, char *, const , meshname ); MED_VARGS_DEF(, med_bool *, const , localmesh ); MED_VARGS_DEF(, med_int *, const , meshnumdt ); MED_VARGS_DEF(, med_int *, const , meshnumit ); MED_VARGS_DEF(, med_err * ,, fret ); _num=csit-1; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * On construit le nom du datagroup */ strcat(_path,fieldname); /* Lecture de l'attribut MED_NOM_MAI */ if ( _MEDattributeStringRdByName(fid,_path,MED_NOM_MAI,MED_NAME_SIZE,meshname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_MAI);SSCRUTE(meshname); goto ERROR; } /* * On recupere le nom de la séquence de calcul */ if ( _MEDobjectGetName(fid, _path ,_num, _cstpname) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path);ISCRUTE_int(_num); goto ERROR; } strcat(_path,"/"); strcat(_path,_cstpname); if ((_gid = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* * Lecture des attributs */ if (_MEDattrEntierLire(_gid,MED_NOM_NDT,(med_int*) numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NDT); SSCRUTE(_path);ISCRUTE(*numdt);goto ERROR; } if (_MEDattrFloatLire(_gid,MED_NOM_PDT,(med_float*) dt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_PDT); SSCRUTE(_path);RSCRUTE(*dt);goto ERROR; } if (_MEDattrEntierLire(_gid,MED_NOM_NOR,(med_int*) numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NOR); SSCRUTE(_path);ISCRUTE(*numit);goto ERROR; } if (_MEDattrEntierLire(_gid,MED_NOM_RDT,(med_int*) meshnumdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_RDT); SSCRUTE(_path);ISCRUTE(*meshnumdt);goto ERROR; } if (_MEDattrEntierLire(_gid,MED_NOM_ROR,(med_int*) meshnumit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_ROR); SSCRUTE(_path);ISCRUTE(*meshnumit);goto ERROR; } /* Maillage local ou distant */ strcat(_meshpath,meshname); /* Le maillage est il distant */ if ( (_meshgid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { /* Verifie que le maillage est bien référencé comme distant */ strcat(_linkpath,meshname); if ((_linkgid = _MEDdatagroupOuvrir(fid,_linkpath)) < 0) { /* MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_MESH,MED_ERR_FIELD_MSG); */ /* SSCRUTE(fieldname);SSCRUTE(_meshpath);SSCRUTE(_linkpath); */ /* goto ERROR; */ *localmesh = MED_FALSE; } *localmesh = MED_FALSE; } else *localmesh = MED_TRUE; *nmesh = 1; _ret = 0; ERROR: if (_gid>0) if (_MEDdatagroupFermer(_gid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_gid); } if (_meshgid>0) if (_MEDdatagroupFermer(_meshgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshgid); } if (_linkgid>0) if (_MEDdatagroupFermer(_linkgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_linkpath); ISCRUTE_id(_linkgid); } va_end(params); *fret = _ret; return; }
med_err MEDmeshComputationStepCr(const med_idt fid, const char * const meshname, const med_int numdt1, const med_int numit1, const med_int numdt2, const med_int numit2, const med_float dt2 ) { med_access_mode _MED_ACCESS_MODE; med_err _ret=-1; med_idt _meshid=0,_datagroup1=0,_datagroup2=0,_datagroup3=0; char _meshpath [MED_MESH_SUPPORT_GRP_SIZE+MED_NAME_SIZE+1]=""; char _datagroupname [2*MED_MAX_PARA+1]=""; char _datagroupname2[2*MED_MAX_PARA+1]=""; char _datagroupname1bis[2*MED_MAX_PARA+1]=""; char _latestcpstname[2*MED_MAX_PARA+1]=""; char* _datagroupname1=_datagroupname; char _datagroupname3[2*MED_MAX_PARA+1]=""; char _prevcpstname[2*MED_MAX_PARA+1]=""; char _pathsrc[MED_MESH_SUPPORT_GRP_SIZE+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]=""; char _pathdst[MED_MESH_SUPPORT_GRP_SIZE+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]=""; med_bool _datagroup1exist = MED_TRUE; med_bool _isasupportmesh = MED_FALSE; med_int _nextdt=MED_NO_DT, _nextit=MED_NO_IT,_pvdt=MED_NO_DT, _pvit=MED_NO_IT; med_int _lastnumdt=MED_NO_DT, _lastnumit=MED_NO_IT; med_int _numdt1=numdt1,_numit1=numit1; med_int _false = 0; med_sorting_type _sortingtype; med_int _intsortingtype; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* strcat( _meshpath, meshname); */ /* strcat( _pathsrc , meshname);strcat( _pathsrc , "/"); */ /* strcat( _pathdst , meshname);strcat( _pathdst , "/"); */ /* if ((_meshid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { */ /* MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_meshpath); */ /* SSCRUTE(_meshid);goto ERROR; */ /* } */ if ((_meshid=_MEDmeshDatagroupOpen(fid,meshname,_meshpath,&_isasupportmesh)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG); SSCRUTE(_meshpath); goto ERROR; } strcat( _pathsrc , _meshpath);strcat( _pathsrc , "/"); strcat( _pathdst , _meshpath);strcat( _pathdst , "/"); if ( _MEDattrEntierLire(_meshid,MED_NOM_NXT,&_lastnumdt) < 0) { /* MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); */ /* SSCRUTE(meshname);SSCRUTE(_meshpath);SSCRUTE(MED_NOM_NXT); */ /* goto ERROR; */ _lastnumdt = MED_NO_DT; } if ( _MEDattrEntierLire(_meshid,MED_NOM_NXI,&_lastnumit) < 0) { /* MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); */ /* SSCRUTE(meshname);SSCRUTE(_meshpath);SSCRUTE(MED_NOM_NXI); */ /* goto ERROR; */ _lastnumit = MED_NO_IT; } if ( _MEDattrEntierLire(_meshid,MED_NOM_SRT,&_intsortingtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_SRT); ISCRUTE(_intsortingtype);goto ERROR; } _sortingtype = (med_sorting_type) (_intsortingtype); _MEDgetComputationStepName(_sortingtype,numdt1,numit1,_datagroupname); _MEDgetComputationStepName(_sortingtype,numdt2,numit2,_datagroupname2); _MEDgetComputationStepName(_sortingtype,_lastnumdt,_lastnumit,_latestcpstname); /* L'utilisateur peut demander la création d'une nouvelle étape de calcul postérieure à toutes les autres en indiquant (numdt1 == numdt2) && (numit1 == numit2) Celà fonctionne aussi pour MED_NO_DT, NED_NO_IT */ if ( (numdt1 == numdt2) && (numit1 == numit2) ) { _numdt1 = _lastnumdt; _numit1 = _lastnumit; _datagroupname1 = _latestcpstname; } /*Vérifie que le _datagroupname2 est bien postérieur ou égal au _datagroupname1 REM: _datagroupname1 peut être la première/dernière séquence de calcul ou une séquence intermédiaire */ if ( strncmp(_datagroupname2,_datagroupname1,2*MED_MAX_PARA+2) < 0) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_COMPUTINGSTEP,_datagroupname2); SSCRUTE(meshname);SSCRUTE(_datagroupname1);goto ERROR; } strcat( _pathsrc , _datagroupname1 );strcat( _pathsrc , "/"); strcat( _pathdst , _datagroupname2 );strcat( _pathdst , "/"); /* On accepte l'absence de _datagroupname1 uniquement si numdt2 == MED_NO_DT && numit2 == MED_NO_IT */ if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) { if ( (numdt2 != MED_NO_DT ) || (numit2 != MED_NO_IT) ) { MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_COMPUTINGSTEP,_datagroupname1); SSCRUTE(meshname);goto ERROR; } } /*L'étape de calcul à créer ne doit pas déjà exister*/ if ( (_datagroup2 = _MEDdatagroupOuvrir(_meshid,_datagroupname2)) >= 0 ) { MED_ERR_(_ret,MED_ERR_EXIST,MED_ERR_COMPUTINGSTEP,_datagroupname2); SSCRUTE(meshname);goto ERROR; } if ( _datagroup1 > 0 ) { /*Lecture NEXT et PREV du datagroup1 */ if ( _MEDattrEntierLire(_datagroup1,MED_NOM_NXT,&_nextdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXT); goto ERROR; } if ( _MEDattrEntierLire(_datagroup1,MED_NOM_NXI,&_nextit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXI); goto ERROR; } /* On vérifie que la nouvelle étape de calcul s'insère correctement : < au next du datagroup1 */ /* if ( !((_nextdt == MED_NO_DT) && (_nextit == MED_NO_IT) )) { */ if ( (_nextdt != MED_NO_DT) || (_nextit != MED_NO_IT) ) { _MEDgetComputationStepName(_sortingtype,_nextdt,_nextit,_datagroupname3); if ( strncmp(_datagroupname3,_datagroupname2,2*MED_MAX_PARA+2) <= 0) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_COMPUTINGSTEP,_datagroupname2); SSCRUTE(meshname);SSCRUTE(_datagroupname3);goto ERROR; } } /*On crée la nouvelle étape de calcul (au plus tard, après vérifs...)*/ if ((_datagroup2 = _MEDdatagroupCreer(_meshid,_datagroupname2)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2); SSCRUTE(meshname);goto ERROR; } /*On crée les datagroups, attributs et liens sur les datatsets et les liens symboliques pour avoir une image de l'étape de calcul précedente.*/ if ( _MEDvisit(fid,_pathsrc,_pathdst,(medvisitorfunc) _MEDlinkobjs ) < 0 ) { MED_ERR_(_ret,MED_ERR_VISIT,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_pathsrc);SSCRUTE(_pathdst); goto ERROR; } /*Ecriture NEXT et PREV du nouveau datagroup2 */ if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXT,&_nextdt) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXI,&_nextit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXI); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVT,&_numdt1) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVI,&_numit1) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVI); goto ERROR; } /*Modification du NEXT du datagroup1 */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NXT,&numdt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NXI,&numit2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXI); goto ERROR; } /*Modification de PREV du ( NEXT de datagroup1 ) s'il existe*/ if (strlen(_datagroupname3) ) { if ( (_datagroup3 = _MEDdatagroupOuvrir(_meshid,_datagroupname3)) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_COMPUTINGSTEP,_datagroupname3); SSCRUTE(meshname);goto ERROR; } if ( _MEDattrEntierLire(_datagroup3,MED_NOM_PVT,&_pvdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVT); goto ERROR; } if ( _MEDattrEntierLire(_datagroup3,MED_NOM_PVI,&_pvit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVI); goto ERROR; } _MEDgetComputationStepName(_sortingtype,_pvdt,_pvit,_datagroupname1bis); if ( strncmp(_datagroupname1,_datagroupname1bis,2*MED_MAX_PARA+2) != 0) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_COMPUTINGSTEP,_datagroupname1); SSCRUTE(meshname);SSCRUTE(_datagroupname1bis);goto ERROR; } if ( _MEDattributeIntWr(_datagroup3,MED_NOM_PVT,&numdt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup3,MED_NOM_PVI,&numit2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_PVI); goto ERROR; } } } else { /* Création de la première étape de calcul */ /*On crée la nouvelle étape de calcul (au plus tard, après vérifs...) */ if ((_datagroup2 = _MEDdatagroupCreer(_meshid,_datagroupname2)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2); SSCRUTE(meshname);goto ERROR; } /* Ecriture de MED_NO_IT, MED_NO_DT pour NEXT et PREV de la première étape de calcul */ if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXT,&numdt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NXI,&numit2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXI); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVT,&numdt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_PVI,&numit2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PVI); goto ERROR; } } /*Cree ou ouvre l'attribut MED_NOM_NDT pour écriture */ if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NDT,&numdt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NDT); ISCRUTE(numdt2);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_PDT pour écriture */ if ( _MEDattrFloatEcrire(_datagroup2,MED_NOM_PDT,&dt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_PDT); RSCRUTE(dt2);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_NOR pour écriture */ if ( _MEDattributeIntWr(_datagroup2,MED_NOM_NOR,&numit2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NOR); ISCRUTE(numit2); goto ERROR; } /* Une nouvelle étape de calcul est vierge de toute modifiation*/ if ( _MEDattributeIntWr(_datagroup2,MED_NOM_CGT,&_false) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT); goto ERROR; } /* Ecriture de NEXT et PREV au niveau meshid (dernière étape de calcul créée */ if ( strncmp(_datagroupname2,_latestcpstname,2*MED_MAX_PARA+2) >= 0) { if ( _MEDattributeIntWr(_meshid,MED_NOM_NXT,&numdt2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXT); goto ERROR; } if ( _MEDattributeIntWr(_meshid,MED_NOM_NXI,&numit2) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_NXI); goto ERROR; } } _ret = 0; ERROR: if (_datagroup3>0) if (_MEDdatagroupFermer(_datagroup3) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname3); ISCRUTE_id(_datagroup3); } if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2); ISCRUTE_id(_datagroup2); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshid); } return _ret; }