void MAJ_21_22_elements_maillage(med_idt mid, med_int dimension) { med_idt eid,gid,did,tid; med_err ret; int i,j; med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE] = {MED_POINT1,MED_SEG2, MED_SEG3,MED_TRIA3, MED_TRIA6,MED_QUAD4, MED_QUAD8,MED_TETRA4, MED_TETRA10,MED_HEXA8, MED_HEXA20,MED_PENTA6, MED_PENTA15,MED_PYRA5, MED_PYRA13}; int taille, edim; char *nom, *nouvelle_chaine; char nomgroup[MED_TAILLE_NOM_ENTITE+1]; med_int n; med_size dimd[1]; med_int *old_conn,*conn; /* On ne regarde que les mailles et la connectivité nodale */ eid = _MEDdatagroupOuvrir(mid,(char *)(MED_NOM_MAI)); EXIT_IF(eid < 0,"Ouverture du groupe HDF MED_NOM_MAI",NULL); /* On normalise selon tous les types geometriques */ for (i=0;i<MED_NBR_GEOMETRIE_MAILLE;i++) { /* On recupere le nom du groupe HDF */ _MEDnomGeometrie(nomgroup,typmai[i]); /* On accède au type s'il existe dans le fichier */ gid = _MEDdatagroupOuvrir(eid,nomgroup); if (gid < 0) continue; /* Nombre d'element ? */ did = _MEDdatasetOuvrir(gid,(char *)(MED_NOM_NOD)); EXIT_IF(did < 0,"Ouverture du dataset HDF MED_NOM_NOD",NULL); ret = _MEDattrEntierLire(did,(char *)(MED_NOM_NBR),&n); EXIT_IF(ret < 0,"Lecture du nombre d'elements",NULL); ret = _MEDdatasetFermer(did); EXIT_IF(ret < 0,"Fermeture du dataset HDF MED_NOM_NOD",NULL); /* on normalise la connectivité si edim < dimension */ edim = typmai[i] / 100; if (edim < dimension) { taille = typmai[i]%100 + 1; old_conn = (med_int *) malloc(sizeof(med_int)*taille*n); EXIT_IF(old_conn == NULL,NULL,NULL); #if defined(HAVE_F77INT64) ret = _MED21datasetNumLire(gid,(char *)(MED_NOM_NOD),MED_INT64, MED_NO_INTERLACE,(med_size)taille,MED_ALL, 0,NULL,MED_NOPG, (unsigned char*) old_conn,H5T_NATIVE_INT); #else ret = _MED21datasetNumLire(gid,(char *)(MED_NOM_NOD),MED_INT32, MED_NO_INTERLACE,(med_size) taille,MED_ALL, 0,NULL,MED_NOPG, (unsigned char*) old_conn,H5T_NATIVE_INT); #endif /* On recopie dans le bon tableau */ taille --; conn = (med_int *) malloc(sizeof(med_int)*taille*n); EXIT_IF(conn == NULL,NULL,NULL); for (j=0;j<n*taille;j++) *(conn+j) = *(old_conn+j); dimd[0] = n*taille; #if defined(HAVE_F77INT64) ret = _MED231datasetNumEcrire(gid,(char *) "TMP",MED_INT64,MED_NO_INTERLACE, taille,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd, (unsigned char*) conn); #else ret = _MED231datasetNumEcrire(gid,(char *) "TMP",MED_INT32,MED_NO_INTERLACE, taille,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd, (unsigned char*) conn); #endif EXIT_IF(ret < 0,"Ecriture de la nouvelle connectivité des mailles",NULL); /* Ecriture du nombre de mailles dans le dataset HDF TMP */ tid = _MEDdatasetOuvrir(gid,"TMP"); EXIT_IF(tid < 0,"Ouverture du dataset HDF TMP",NULL); ret = _MEDattrEntierEcrire(tid,(char *)(MED_NOM_NBR),&n); EXIT_IF(ret < 0,"Ecriture du nombre de noeuds dans le dataset HDF TMP",NULL); ret = _MEDdatasetFermer(tid); EXIT_IF(ret < 0,"Fermeture du dataset HDF TMP",NULL); /* Fermeture de l'accès aux connectivites */ ret = H5Gunlink(gid,(char *)(MED_NOM_NOD)); EXIT_IF(ret < 0,"Suppression des anciennes connectivités",NULL); ret = H5Gmove(gid,"TMP",(char *)(MED_NOM_NOD)); EXIT_IF(ret < 0,"Mise en place des nouvelles connectivités",NULL); /* on libere la memoire */ free(old_conn); free(conn); } /* Mise a niveau des noms */ nom = (char *) malloc(n*ANCIEN_MED_TAILLE_PNOM+1); EXIT_IF(nom == NULL,NULL,NULL); nouvelle_chaine = (char *) malloc(n*MED_TAILLE_PNOM+1); EXIT_IF(nouvelle_chaine == NULL,NULL,NULL); ret = _MEDdatasetStringLire(gid,(char *)(MED_NOM_NOM),nom); if (ret == 0) { _MED23v30stringConvert(nouvelle_chaine, MED_TAILLE_PNOM, nom, ANCIEN_MED_TAILLE_PNOM, n ); /* MAJ_21_22_chaine(nom,nouvelle_chaine,n); */ H5Gunlink(gid,(char *)(MED_NOM_NOM)); dimd[0] = n*MED_TAILLE_PNOM+1; ret = _MEDdatasetStringEcrire(gid,(char *)(MED_NOM_NOM),dimd,nouvelle_chaine); EXIT_IF(ret < 0,"Ecriture des nouveaux noms des éléments",NULL); did = _MEDdatasetOuvrir(gid,(char *)(MED_NOM_NOM)); ret = _MEDattrEntierEcrire(did,(char *)(MED_NOM_NBR),&n); ret = _MEDdatasetFermer(did); } free(nom); free(nouvelle_chaine); /* on ferme avant de passer au type geometrique suivant */ ret = _MEDdatagroupFermer(gid); EXIT_IF(ret < 0,"Fermeture de l'accès aux mailles",NULL); } /* On ferme tout */ ret = _MEDdatagroupFermer(eid); EXIT_IF(ret < 0,"Fermeture de l'accès aux mailles",NULL); }
med_err MEDconnEcr(med_idt fid,char *maa, med_int mdim, med_int *connectivite,med_mode_switch mode_switch, med_int nbre, med_entite_maillage type_ent, med_geometrie_element type_geo,med_connectivite type_conn) { med_idt maaid, entid, geoid, dataset; med_err ret; med_size dimd[1]; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; char nom_ent[MED_TAILLE_NOM_ENTITE+1]; char nom_geo[MED_TAILLE_NOM_ENTITE+1]; char nom_dataset[MED_TAILLE_NOM_ENTITE+1]; int dim, nnoe, ndes; int taille; med_entite_maillage _type_ent=type_ent; if ( type_ent == MED_NOEUD_MAILLE ) _type_ent=MED_NOEUD ; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur */ strcpy(chemin,MED_MAA); strcat(chemin,maa); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * On met a jour le nom du Data Group representant * le type des entites */ if ((ret = _MEDnomEntite(nom_ent,_type_ent)) < 0) return -1; /* * Si le Data Group des entites n'existe pas on le cree */ if ((entid = _MEDdatagroupOuvrir(maaid,nom_ent)) < 0) if ((entid = _MEDdatagroupCreer(maaid,nom_ent)) < 0) return -1; /* * On cree s'il n'existe pas le Data Group du type geometrique */ if ((ret = _MEDnomGeometrie(nom_geo,type_geo)) < 0) return -1; if ((geoid = _MEDdatagroupOuvrir(entid,nom_geo)) < 0) if ((geoid = _MEDdatagroupCreer(entid,nom_geo)) < 0) return -1; /* * On regarde si le Data Set existe et on le cree sinon */ if ((ret=_MEDparametresGeometrie(_type_ent,type_geo,&dim,&nnoe,&ndes))<0) return -1; switch(type_conn) { case MED_NOD : strcpy(nom_dataset,MED_NOM_NOD); taille = nnoe; break; case MED_DESC : strcpy(nom_dataset,MED_NOM_DES); taille = ndes; break; default : return -1; } dimd[0] = nbre*taille; #if defined(HAVE_F77INT64) ret = _MEDdatasetNumEcrire(geoid,nom_dataset,MED_INT64,mode_switch,(med_size)taille,MED_ALL, MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) connectivite); #else ret = _MEDdatasetNumEcrire(geoid,nom_dataset,MED_INT32,mode_switch,(med_size)taille,MED_ALL, MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) connectivite); #endif if (ret < 0 ) { MESSAGE("Impossible d'ecrire le dataset coon de taille : "); ISCRUTE_int(taille); return -1; } /* * Attribut NBR (nombre de noeuds ou d'elements) */ if ((dataset = _MEDdatasetOuvrir(geoid,nom_dataset)) < 0) return -1; if ((ret = _MEDattrEntierEcrire(dataset,MED_NOM_NBR,&nbre)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if ((ret = _MEDdatagroupFermer(geoid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(entid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }
med_err MEDjointEcr (med_idt fid, char *maa, char *jn, med_int *corrtab, med_int n, med_entite_maillage type_ent_local, med_geometrie_element typ_geo_local, med_entite_maillage type_ent_distant, med_geometrie_element typ_geo_distant) { med_entite_maillage _type_ent_local = (med_entite_maillage) ( (int)(type_ent_local) % 10 ); med_entite_maillage _type_ent_distant = (med_entite_maillage) ( (int)(type_ent_distant) % 10 ); med_idt corrid, datagroup; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_JNT+2*MED_TAILLE_NOM+1]; char nomdatagroup[MED_TAILLE_NOM+1+MED_TAILLE_NOM+1]; char tmp[MED_TAILLE_NOM_ENTITE+1]; med_size dimd[1]; med_mode_acces MED_MODE_ACCES; /* if (typ_geo_local == MED_TETRA4 || typ_geo_local == MED_TETRA10 || */ /* typ_geo_local == MED_HEXA8 || typ_geo_local == MED_HEXA20 || */ /* typ_geo_local == MED_PENTA6 || typ_geo_local == MED_PENTA15 || */ /* typ_geo_local == MED_PYRA5 || typ_geo_local == MED_PYRA13 || */ /* typ_geo_distant == MED_TETRA4 || typ_geo_distant == MED_TETRA10 || */ /* typ_geo_distant == MED_HEXA8 || typ_geo_distant == MED_HEXA20 || */ /* typ_geo_distant == MED_PENTA6 || typ_geo_distant == MED_PENTA15 || */ /* typ_geo_distant == MED_PYRA5 || typ_geo_distant == MED_PYRA13) */ /* return -1; */ /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier "); return -1; } /* * Si le Data Group de "JNT" n'existe pas => erreur */ strcpy(chemin,MED_MAA); strcat(chemin,maa); strcat(chemin,MED_JNT); strcat(chemin,jn); if ((corrid = _MEDdatagroupOuvrir(fid,chemin)) < 0) { MESSAGE(chemin); return -1; } /* * Ecriture de la correspondance * construction du tag HDF "reperant" la correspondance * */ if ((ret = _MEDnomEntite(nomdatagroup,_type_ent_local)) < 0) return -1; if ((_type_ent_local != MED_NOEUD)) { if ((ret = _MEDnomGeometrie(tmp,typ_geo_local)) < 0) return -1; strcat(nomdatagroup,"."); strcat(nomdatagroup,tmp); } if ((ret = _MEDnomEntite(tmp,_type_ent_distant)) < 0) return -1; strcat(nomdatagroup,"."); strcat(nomdatagroup,tmp); if ((_type_ent_distant != MED_NOEUD)) { if ((ret = _MEDnomGeometrie(tmp,typ_geo_distant)) < 0) return -1; strcat(nomdatagroup,"."); strcat(nomdatagroup,tmp); } datagroup = 0; /* * Si la correspondance existe, on passe en mode * ajout ????????? */ if (((datagroup = _MEDdatagroupOuvrir(corrid,nomdatagroup)) > 0) && ( MED_MODE_ACCES == MED_LECTURE_AJOUT)) return -1; else if (datagroup > 0) _MEDdatagroupFermer(datagroup); if ((datagroup = _MEDdatagroupCreer(corrid,nomdatagroup)) < 0) return -1; /* * L'attribut "NBR" */ if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n)) < 0) return -1; dimd[0] = 2*n; #if defined(HAVE_F77INT64) if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_COR,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) corrtab)) < 0) return -1; #else if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_COR,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) corrtab)) < 0) return -1; #endif /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(datagroup)) < 0) return -1; if ((ret = _MEDdatagroupFermer(corrid)) < 0) return -1; return 0; }
med_err MED231champRefInfoEtRenMaa(med_idt fid,char *champ, med_entite_maillage type_ent, med_geometrie_element type_geo, int indice, med_int numdt, med_int numo, char * maa, med_booleen * local, med_int *ngauss) { med_err ret=-1; int num; med_idt datagroup2=0,datagroup3=0,gid_maa=0,gid_lien=0; char chemin[(MED_TAILLE_CHA+MED_TAILLE_NOM+1)+(2*MED_TAILLE_NOM_ENTITE+2)+(2*MED_MAX_PARA+1)+(MED_TAILLE_NOM)+1]=""; char chemini[(MED_TAILLE_CHA+MED_TAILLE_NOM+1)+(2*MED_TAILLE_NOM_ENTITE+2)+(2*MED_MAX_PARA+1)+(MED_TAILLE_NOM)+1]=""; char chemin_maa[MED_TAILLE_MAA+MED_TAILLE_NOM+1]=""; char chemin_lien[MED_TAILLE_LIENS+MED_TAILLE_NOM+1]=""; char nomdatagroup1[2*MED_TAILLE_NOM_ENTITE+2]=""; char nomdatagroup2[2*MED_MAX_PARA+1]=""; char tmp1 [MED_TAILLE_NOM_ENTITE+1]=""; char maai [MED_TAILLE_NOM+1]; char maaf [MED_TAILLE_NOM+1]=""; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * On construit le nom du datagroup */ strcpy(chemin,MED_CHA); strcat(chemin,champ); strcat(chemin,"/"); /* * Si le Data Group de niveau 1 <type_ent>[.<type_geo>] n'existe pas => erreur */ /* modif pour la version 2.3.3 */ if (_MEDnomEntite(nomdatagroup1,type_ent) < 0) goto ERROR; if ((type_ent != MED_NOEUD)) { if (_MEDnomGeometrie(tmp1,type_geo) < 0) goto ERROR; strcat(nomdatagroup1,"."); strcat(nomdatagroup1,tmp1); } strcat(chemin,nomdatagroup1); strcat(chemin,"/"); /* * Si le Data Group de niveau 2 <numdtt>.<numoo> n'existe pas => erreur */ sprintf(nomdatagroup2,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numo); strcat(chemin,nomdatagroup2); /* * Modifie le nom de la première référence à un maillage * si besoin est */ if ( (datagroup2 = _MEDdatagroupOuvrir(fid,chemin)) < 0 ) { MESSAGE("Erreur à l'ouverture du datagroup : "); SSCRUTE(chemin); goto ERROR; } if ( _MEDattrStringLire(datagroup2,MED_NOM_MAI,MED_TAILLE_NOM,maai) < 0 ) { MESSAGE("Erreur de lecture de l'attribut MED_NOM_MAI : "); SSCRUTE(maai); goto ERROR; } if ( MAJ_231_232_chaine(maai,maaf) ) { fprintf(stdout," >>> Normalisation du nom de maillage par défaut [%s] associé au champ [%s] pour (n°dt,n°it) ("IFORMAT","IFORMAT")\n",maai,champ,numdt,numo); ret = _MEDattrStringEcrire(datagroup2,MED_NOM_MAI,MED_TAILLE_NOM,maaf); EXIT_IF(ret < 0,"Renommage du maillage en",maaf); fprintf(stdout," >>> Normalisation du nom du maillage par défaut [%s] ... OK ... \n",maaf); } if (_MEDdatagroupFermer(datagroup2) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_int(datagroup2); goto ERROR; } strcat(chemin,"/"); /* * Cherche le datagroup de niveau 3 <maa> correspondant à l'indice <num> */ num = indice - 1; if (_MEDobjetIdentifier(fid,chemin,num,maa) < 0) { MESSAGE("Impossible de trouver un groupe à l'indice spécifié : "); SSCRUTE(chemin); ISCRUTE_int(num); goto ERROR; }; if ( MAJ_231_232_chaine(maa,maaf) ) { fprintf(stdout," >>> Normalisation du nom de maillage [%s] associé au champ [%s] pour (n°dt,n°it) ("IFORMAT","IFORMAT")\n",maa,champ,numdt,numo); /* on accede au maillage */ strcpy(chemini,chemin); strcat(chemini,maa); strcat(chemin,maaf); ret = H5Gmove(fid, chemini, chemin ); EXIT_IF(ret < 0,"Renommage du maillage en",maaf); fprintf(stdout," >>> Normalisation du nom du maillage [%s] ... OK ... \n",maaf); } else strcat(chemin,maa); /* * Si le Data Group de niveau 3 <maa> n'existe pas => erreur */ if ((datagroup3 = _MEDdatagroupOuvrir(fid,chemin)) < 0) { MESSAGE("Erreur d'ouverture du datagroup lien au maillage : "); SSCRUTE(chemin); goto ERROR; }; /* Lire le nbre des points de GAUSS*/ if (_MEDattrEntierLire(datagroup3,MED_NOM_NGA,ngauss) < 0) { MESSAGE("Erreur à la lecture de l'attribut MED_NOM_NGA : "); ISCRUTE(*ngauss);goto ERROR; }; /* Maillage local ou distant */ /* Les noms de maillages n'ayant pas encore été mis à jour on garde l'ancien nom pour le test local/distant */ strcpy(chemin_maa,MED_MAA); strcat(chemin_maa,maa); /* Le maillage est il distant */ if ( (gid_maa = _MEDdatagroupOuvrir(fid,chemin_maa)) < 0) { /* Verifie que le maillage est bien référencé comme distant */ strcpy(chemin_lien,MED_LIENS); strcat(chemin_lien,maa); if ((gid_lien = _MEDdatagroupOuvrir(fid,chemin_lien)) < 0) { /* MESSAGE("Le maillage n'est ni local, ni distant : "); */ /* SSCRUTE(chemin_maa);SSCRUTE(chemin_lien); goto ERROR; */ *local = MED_FAUX; } *local = MED_FAUX; } else *local = MED_VRAI; /*On retourne le nouveau nom de maillage*/ if ( strlen(maaf) ) strcpy(maa,maaf); /* * On ferme tout */ ret = 0; ERROR: if (datagroup3>0) if (_MEDdatagroupFermer(datagroup3) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_int(datagroup3); ret = -1; } if (gid_maa>0) if (_MEDdatagroupFermer(gid_maa) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid_maa); ret = -1; } if (gid_lien>0) if (_MEDdatagroupFermer(gid_lien) < 0) { MESSAGE("Impossible de fermer le datagroup : "); SSCRUTE(chemin_lien); ret = -1; } return ret; }
med_err MEDnumEcr(med_idt fid,char *maa, med_int *num, med_int n, med_entite_maillage type_ent,med_geometrie_element type_geo) { med_idt root, maaid, entid, geoid, dataset; med_err ret; med_size dimd[1]; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; char nom_ent[MED_TAILLE_NOM_ENTITE+1]; char nom_geo[MED_TAILLE_NOM_ENTITE+1]; med_entite_maillage _type_ent=type_ent; if ( type_ent == MED_NOEUD_MAILLE ) _type_ent=MED_NOEUD ; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur */ strcpy(chemin,MED_MAA); strcat(chemin,maa); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * On met a jour le nom du Data Group representant * le type des entites */ if ((ret = _MEDnomEntite(nom_ent,_type_ent)) < 0) return -1; /* * Si le Data Group des entites n'existe pas on le cree */ if ((entid = _MEDdatagroupOuvrir(maaid,nom_ent)) < 0) if ((root = _MEDdatagroupCreer(maaid,nom_ent)) < 0) return -1; /* * Pour les mailles, les faces et le aretes, on cree * s'il n'existe pas le Data Group du type geometrique */ if ((_type_ent==MED_MAILLE)||(_type_ent==MED_FACE)||(_type_ent==MED_ARETE)) { if ((ret = _MEDnomGeometrie(nom_geo,type_geo)) < 0) return -1; if ((geoid = _MEDdatagroupOuvrir(entid,nom_geo)) < 0) if ((geoid = _MEDdatagroupCreer(entid,nom_geo)) < 0) return -1; } else geoid = -1; /* * Creation du Data Set "NUM" */ if (geoid == -1) root = entid; else root = geoid; dimd[0] = n; #if defined(HAVE_F77INT64) if ((ret = _MEDdatasetNumEcrire(root,MED_NOM_NUM,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) num)) < 0) return -1; #else if ((ret = _MEDdatasetNumEcrire(root,MED_NOM_NUM,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) num)) < 0) return -1; #endif /* * Attribut NBR (nombre de noeuds) */ if ((dataset = _MEDdatasetOuvrir(root,MED_NOM_NUM)) < 0) return -1; if ((ret = _MEDattrEntierEcrire(dataset,MED_NOM_NBR,&n)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if (geoid != -1) if ((ret = _MEDdatagroupFermer(geoid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(entid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }