void _MEDsubdomainCorrespondenceSize30(int dummy, ...) { med_err _ret=-1; med_idt _eqid=0,_datagroup1=0,_dataset=0; char _path[MED_JOINT_GRP_SIZE+2*MED_NAME_SIZE+2+2*MED_MAX_PARA+1+4*MED_TAILLE_NOM_ENTITE+4]=MED_JOINT_GRP; char _datagroupname1[2*MED_TAILLE_NOM_ENTITE+2]=""; char _cstpname[2*MED_MAX_PARA+1]=""; med_size _njointarray=0; med_sorting_type _sortingtype=0; med_int _intlocalentitype; med_int _intlocalgeotype; char _localgeotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _remotegeotypename [MED_TAILLE_NOM_ENTITE+1]=""; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, char * , const , jointname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , localentitype ); MED_VARGS_DECL(const, med_geometry_type , , localgeotype ); MED_VARGS_DECL(const, med_entity_type , , remoteentitype ); MED_VARGS_DECL(const, med_geometry_type , , remotegeotype ); MED_VARGS_DECL(, med_int *, const , nentitycor ); 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 , meshname ); MED_VARGS_DEF(const, char * , const , jointname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , localentitype ); MED_VARGS_DEF(const, med_geometry_type , , localgeotype ); MED_VARGS_DEF(const, med_entity_type , , remoteentitype ); MED_VARGS_DEF(const, med_geometry_type , , remotegeotype ); MED_VARGS_DEF(, med_int *, const , nentitycor ); MED_VARGS_DEF(, med_err * ,, fret ); /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if ( MEDmeshSortingTypeRd(fid,meshname,&_sortingtype) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd"); SSCRUTE(meshname);ISCRUTE_int(_sortingtype);goto ERROR; } strcat( _path, meshname); strcat( _path, "/"); strcat( _path, jointname); strcat( _path, "/"); _MEDgetComputationStepName(_sortingtype,numdt,numit,&_path[strlen(_path)]); strcat( _path, "/"); /* * Construction du nom de datagroup <localentitype>[.<localgeotype>].<remoteentitype>[.<remotegeotype>] */ if (_MEDgetEntityTypeName(&_path[strlen(_path)],localentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(localentitype);SSCRUTE(jointname);goto ERROR; } if ( localentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(0,_localgeotypename,localgeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(localgeotype);SSCRUTE(jointname);goto ERROR; } strcat(_path,"."); strcat(_path,_localgeotypename); } strcat(_path,"."); if (_MEDgetEntityTypeName(&_path[strlen(_path)],remoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(remoteentitype);SSCRUTE(jointname);goto ERROR; } if ( remoteentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(fid,_remotegeotypename,remotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(remotegeotype);SSCRUTE(jointname);goto ERROR; } strcat(_path,"."); strcat(_path,_remotegeotypename); } if ( (_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0 ) { *nentitycor=0; goto SORTIE; } if ((_dataset = _MEDdatasetOuvrir(_datagroup1,MED_NOM_COR)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path); goto ERROR; } if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,nentitycor) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_NBR);ISCRUTE(*nentitycor); goto ERROR; } SORTIE: _ret = 0; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR); ISCRUTE_id(_dataset); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_datagroup1); } va_end(params); *fret = _ret; return; }
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 MEDcoordLire(med_idt fid, char *maa, med_int mdim, med_float *coo, med_mode_switch mode_coo,med_int numco, med_int * pfltabtmp, med_size psize, med_repere *type_rep, char *nom, char *unit) { med_idt maaid, noeid, dataset; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; int i,j; med_float *new_coo; med_int type_rep_int; med_size * pfltab; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur * Sinon on recupere sa dimension au passage */ strcpy(chemin,MED_MAA); strcat(chemin,maa); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Si le Data Group "NOE" n'existe pas => erreur */ if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0) return -1; /* * Convertion de med_int en med_size */ if ( psize != MED_NOPF ) { pfltab = (med_size *) malloc (sizeof(med_size)*psize); for (i=0;i<psize;i++) pfltab[i] = (med_size) pfltabtmp[i]; } /* * Lecture du Data Set "COO" */ if ((ret = _MEDdatasetNumLire(noeid,MED_NOM_COO,MED_FLOAT64, mode_coo,mdim,numco, psize,MED_COMPACT,MED_PFL_NON_COMPACT,pfltab,MED_NOPG,0, (unsigned char*) coo)) < 0) return -1; /* * On re-ouvre le Data Set "COO" pour y lire des attributs */ if ((dataset = _MEDdatasetOuvrir(noeid,MED_NOM_COO)) < 0) return -1; /* * L'attribut "REP" */ if ((ret = _MEDattrEntierLire(dataset,MED_NOM_REP,&type_rep_int)) < 0) return -1; else *type_rep = (med_repere) type_rep_int; /* * Attribut "NOM" */ if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,mdim*MED_TAILLE_PNOM, nom)) < 0) return -1; /* * Attribut "UNI" */ if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,mdim*MED_TAILLE_PNOM, unit)) < 0) return -1; /* * On ferme tout */ if ( psize != MED_NOPF ) free(pfltab); if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if ((ret = _MEDdatagroupFermer(noeid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }
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; }
void _MEDmeshnEntity30(int dummy, ...) { med_access_mode _MED_ACCESS_MODE; med_int _ret=-1,_err=-1; med_idt _meshid=0, _datagroup=0,_datagroupf=0,_datagroup1=0; med_idt _datagroup2=0,_datagroup3=0,_datagroup4=0,_dataset=0; char _meshpath [MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1]=""; char _datagroupname1 [2*MED_MAX_PARA+1] =""; char _datagroupname2 [MED_TAILLE_NOM_ENTITE+1]=""; char _datagroupname3 [MED_TAILLE_NOM_ENTITE+1]=""; char _datagroupname4 [MAX(MED_TAILLE_VARATR,MED_TAILLE_COOTRF)]=""; char _datasetconame [3 + 1 + 3 + 1 ] =""; char _profilename [MED_NAME_SIZE+1] =""; char _geotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _datasetname [MED_TAILLE_NOM_ENTITE+1]=""; med_sorting_type _sortingtype = 0; med_int _intsortingtype = 0; med_int _profilearraysize = 0; med_int _changement=0, _changement_s=0, _transformation=0; med_bool _changement_co = MED_FALSE; med_size _n=0; med_int _intn=0; med_bool _isasupportmesh = MED_FALSE; med_bool _isasoftlink = MED_FALSE; med_bool _datasetexist = MED_FALSE; med_int _ntmpmeddatatype = 1; med_data_type _tmpmeddatatype[4] = {MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE}; med_grid_type _gridtype = MED_UNDEF_GRID_TYPE; med_int _intgridtype = 0; med_int _intmeshtype = 0; med_int _meshdim = 0; int _i = 0; med_connectivity_mode _cmode ; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , entitytype ); MED_VARGS_DECL(const, med_geometry_type , , geotype ); MED_VARGS_DECL(const, med_data_type , , meddatatype ); MED_VARGS_DECL(const, med_connectivity_mode , , cmode ); MED_VARGS_DECL(const, med_storage_mode , , storagemode ); MED_VARGS_DECL(, char *, const , profilename ); MED_VARGS_DECL(, med_int *, const , profilesize ); MED_VARGS_DECL(, med_bool *, const , changement ); MED_VARGS_DECL(, med_bool *, const , transformation ); MED_VARGS_DECL(, med_int * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , meshname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , entitytype ); MED_VARGS_DEF(const, med_geometry_type , , geotype ); MED_VARGS_DEF(const, med_data_type , , meddatatype ); MED_VARGS_DEF(const, med_connectivity_mode , , cmode ); MED_VARGS_DEF(const, med_storage_mode , , storagemode ); MED_VARGS_DEF(, char *, const , profilename ); MED_VARGS_DEF(, med_int *, const , profilesize ); MED_VARGS_DEF(, med_bool *, const , changement ); MED_VARGS_DEF(, med_bool *, const , transformation ); MED_VARGS_DEF(, med_int * ,, fret ); _cmode = cmode; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } /* * Ouverture du datagroup de niveau 1 <_meshpath>/<meshname> */ NOFINALBLANK(meshname,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; } /* Lecture de la dimension du maillage */ if (_MEDattrEntierLire(_meshid,MED_NOM_DIM,&_meshdim) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_DIM);ISCRUTE(_meshdim);goto ERROR; } /* Lecture du type de maillage (attribut MED_NOM_TYP) */ if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR; } if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) { /* Lecture de l'attribut MED_NOM_GTY */ if (_MEDattrEntierLire(_meshid,MED_NOM_GTY,&_intgridtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);ISCRUTE(_intgridtype);goto ERROR; } _gridtype= (med_grid_type) _intgridtype; } /* * Ouverture du datagroup de niveau 2 <numdt>.<numit> */ 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,numdt,numit,_datagroupname1); if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname1);ISCRUTE_id(_datagroup1);goto ERROR; } /* * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente) */ if ( _MEDattrEntierLire(_datagroup1,MED_NOM_CGT,&_changement) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_CGT);goto ERROR; } *changement = (med_bool) _changement; *transformation = MED_FALSE; /* * Gestion entitytype == MED_UNDEF_ENTITY_TYPE */ if ( entitytype == MED_UNDEF_ENTITY_TYPE ) { _n=0; goto SORTIE; } /* * Gestion entitytype == MED_ALL_ENTITY_TYPE */ if ( entitytype == MED_ALL_ENTITY_TYPE ) { _err=_MEDnObjects(_datagroup1,".",&_n); if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname1); goto ERROR; } goto SORTIE; } /* * Ouverture du datagroup de niveau 3 <entitytype> */ if (_MEDgetEntityTypeName(_datagroupname2,entitytype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(entitytype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);goto ERROR; } if ((_datagroup2 = _MEDdatagroupOuvrir(_datagroup1,_datagroupname2)) < 0) { *changement = (med_bool) MED_FALSE; _n=0;_datagroup2=0; goto SORTIE; } /* MAJ du changement pour le type d'entité <entitytype> * ( annulant eventuellement le changement global précédent concernant tous les types d'entités) * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente) */ if ( _MEDattrEntierLire(_datagroup2,MED_NOM_CGT,&_changement) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_CGT); goto ERROR; } *changement = (med_bool) _changement; /* * Ouverture du datagroup de niveau 4 <geotype> */ /* Pas Utilisation pour MED_NODE */ if ( geotype == MED_GEO_ALL ) { _err=_MEDnObjects(_datagroup2,".",&_n); if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname2); goto ERROR; } /*Par construction du modèle, le tableau de coordonnées preexiste aux autres */ if ( ( entitytype == MED_NODE ) && (_n > 0) ) _n=1; goto SORTIE; } if ( entitytype != MED_NODE ) { /* Lecture du nom de type géométrique */ /*TODO : Remplacer les deux appels suivants par un seul gérant les geotype dynamiques et statiques*/ if ( entitytype == MED_STRUCT_ELEMENT ) { if ( MEDstructElementName(fid, geotype,_datagroupname3) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDstructElementName"); ISCRUTE_int(geotype);goto ERROR; } } else if ( _MEDgetInternalGeometryTypeName(_datagroupname3,geotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(geotype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);goto ERROR; } if ((_datagroup3 = _MEDdatagroupOuvrir(_datagroup2,_datagroupname3)) < 0) { _n=0; *changement = MED_FALSE; goto SORTIE; } } if (_datagroup3) _datagroup=_datagroup3; else _datagroup=_datagroup2; /* MAJ du changement pour le type géométrique d'entité <geotype> * ( annulant eventuellement le changement global précédent concernant tous les types d'entités) * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente) * Prend en charge le cas d'un dataset vide écrit pour un typegeo donné (CHGT==1) */ if (_datagroup3) { if ( _MEDattrEntierLire(_datagroup3,MED_NOM_CGT,&_changement) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT); goto ERROR; } *changement = (med_bool) _changement; } /* * Lecture du flag de modification sur autre chose que MED_CONNECTIVITY,MED_COORDINATE,MED_COORDINATE_AXIS<i> * */ if ( _MEDattrEntierLire(_datagroup,MED_NOM_CGS,&_changement_s) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGS);goto ERROR; } /* 1) Lorsque l'utilisateur interroge un <meddatatype> qui est relatif a des coordonnées (famille,....) il faut mettre * le flag chgt à jour par rapport à des modifications potentiellement effectuées sur ces coordonnées * <=> * Si on interroge autre chose que MED_CONNECTIVITY,MED_COORDINATE * et qu'un changement est présent sur MED_CONNECTIVITY,MED_COORDINATE * le flag chgt doit être positionné à vrai * Une demande entitype==MED_NODE && (meddatatype == MED_COORDINATE_AXIS1)||(meddatatype == MED_COORDINATE_AXIS2) * ||(meddatatype === MED_COORDINATE_AXIS3) est assimilée à une demande concernant des coordonnées * <=> * Y-a-t'il une modification des datasets COO(si NOE)| NOD|DES(si !NOE) */ /* 2) * Positionne un mode de connectivité _cmode si le meddatatype demandé * est autre chose que des coordonnées ou des connectivités et que le cmode n'a pas été * spécifié par l'utilisateur. * Cette Information est necessaire pour construire le nom du dataset. */ if ( (meddatatype != MED_CONNECTIVITY) && ( meddatatype != MED_COORDINATE ) && (meddatatype != MED_COORDINATE_AXIS1) && (meddatatype != MED_COORDINATE_AXIS2) && (meddatatype != MED_COORDINATE_AXIS3) && (meddatatype != MED_INDEX_FACE) && (meddatatype != MED_INDEX_NODE)) { if (entitytype == MED_NODE) { if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) { if ( (_gridtype == MED_CARTESIAN_GRID) || (_gridtype == MED_CURVILINEAR_GRID) ) { _ntmpmeddatatype=_meshdim; _tmpmeddatatype[0] = MED_COORDINATE_AXIS1; _tmpmeddatatype[1] = MED_COORDINATE_AXIS2; _tmpmeddatatype[2] = MED_COORDINATE_AXIS3; } else if (_gridtype == MED_CURVILINEAR_GRID ) { /*Les grilles curvilinéaires utilisent MED_COORDINATE_AXISx pour stocker la structure et le tableau MED_COORDINATE pour stocker les coordonnées des noeuds */ ++_ntmpmeddatatype; _tmpmeddatatype[3] = MED_COORDINATE; } else { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GRIDTYPE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE_int(_gridtype);goto ERROR; } } else _tmpmeddatatype[0] = MED_COORDINATE; } else { switch (geotype) { case MED_POLYHEDRON: _ntmpmeddatatype=3; _tmpmeddatatype[2] = MED_CONNECTIVITY; _tmpmeddatatype[1] = MED_INDEX_FACE; _tmpmeddatatype[0] = MED_INDEX_NODE; break; case MED_POLYGON: _ntmpmeddatatype=2; _tmpmeddatatype[1] = MED_CONNECTIVITY; _tmpmeddatatype[0] = MED_INDEX_NODE; break; default: if ( ( (med_mesh_type) _intmeshtype ) == MED_STRUCTURED_MESH ) { _ntmpmeddatatype=0; break; } _tmpmeddatatype[0] = MED_CONNECTIVITY; if ( cmode == MED_NO_CMODE ) { if ( _MEDdatasetExistByMedtype(_datagroup,MED_CONNECTIVITY,MED_NODAL, &_datasetexist, &_isasoftlink) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatasetExistByMedtype"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } if ( _datasetexist ) _cmode= MED_NODAL; else if ( _MEDdatasetExistByMedtype(_datagroup,MED_CONNECTIVITY,MED_DESCENDING, &_datasetexist, &_isasoftlink) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatasetExistByMedtype"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } else _cmode = MED_DESCENDING; } } } *changement = MED_FALSE; for (_i=0; _i < _ntmpmeddatatype ;++_i) { if ( _MEDgetDatasetChgt( _datagroup, _tmpmeddatatype[_i], _cmode, &_isasoftlink, &_changement_co ) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"getDatasetChgt"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } *changement |= _changement_co; } } /* * Niveau de datagroup 5 supplémentaire pour les éléments de structure ou les transformations. */ if ( (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF ) ) { if (meddatatype == MED_VARIABLE_ATTRIBUTE) strcpy(_datagroupname4,MED_VARATR_NOM); else strcpy(_datagroupname4,MED_COOTRF_NOM); if ((_datagroup4 = _MEDdatagroupOuvrir(_datagroup,_datagroupname4)) < 0) { _n=0; goto SORTIE; } } if ( (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF ) ) _datagroupf=_datagroup4; else _datagroupf=_datagroup; /* * Construction du nom du dataset à lire */ if ( _MEDgetDatasetName(_datasetname,meddatatype,cmode) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetDatasetName"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } /* * MAJ du champ transformation pour le (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF) */ if (_datagroup4) { if ( _MEDattrEntierLire(_datagroup4,MED_NOM_CGT,&_transformation) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);SSCRUTE(MED_NOM_CGT); goto ERROR; } } if ( (_dataset = _MEDdatasetOuvrir(_datagroupf,_datasetname)) < 0) { _n=0;_dataset=0;*transformation = (med_bool) MED_FALSE; /* if ( (numdt != MED_NO_DT) || (numit != MED_NO_IT) ) { */ /* MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,_datasetname); */ /* SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); */ /* SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4); */ /* ISCRUTE_size(_n); */ /* goto ERROR; */ /* } */ goto SORTIE; } if (!_datagroup4) { /* * Lire l'attribut CGT pour savoir si le dataset a changé * n'a pas de sens si le dataset est en fait un lien vers le dataset précedent. * En testant si le dataset est un lien on détermine si un changement a eu lieu * depuis la séquence de calcul précédente. * Ce traitement ne doit pas être effectué pour le pas de temps initial et pour * (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF) */ if ( _MEDisasoftlink(_datagroupf, _datasetname,MED_TRUE, &_isasoftlink ) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_LINK,_datasetname); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4); ISCRUTE_size(_n);goto ERROR; } if (_isasoftlink) _transformation = MED_FALSE; else { if ( _MEDattrEntierLire(_dataset,MED_NOM_CGT,&_transformation) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT); goto ERROR; } } } *transformation = (med_bool) _transformation; if ( ( meddatatype == MED_CONNECTIVITY) && ( meddatatype == MED_COORDINATE ) ) { *transformation &= (med_bool) !_changement_s; } /* * Attribut PFL (nombre de noeuds ou d'elements) * la lecture est faite sur le datagroup _datagroup et non sur _datagroupf * pour (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF) */ _profilearraysize = 0; profilename[0]='\0'; if ( _MEDattrStringLire(_datagroup,MED_NOM_PFL,MED_NAME_SIZE,_profilename) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3); SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR; } if ( strcmp(_profilename,MED_NO_PROFILE_INTERNAL) ) { strncpy(profilename,_profilename,MED_NAME_SIZE+1); profilename[MED_NAME_SIZE]='\0'; if ( ( _profilearraysize = MEDprofileSizeByName( fid,_profilename) ) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_profilename);SSCRUTE("MEDprofileSizeByName");goto ERROR; } } *profilesize=(med_int) _profilearraysize; /* * Attribut NBR (nombre d'entité) */ if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,&_intn) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4); SSCRUTE(_datasetname);SSCRUTE(MED_NOM_NBR);ISCRUTE_size(_n);goto ERROR; } _n = _intn; if (_profilearraysize) switch(storagemode) { case MED_GLOBAL_PFLMODE : break; case MED_COMPACT_PFLMODE : if ( meddatatype!=MED_COORDINATE_TRSF ) _n=_profilearraysize; break; default : MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_STORAGEMODE,MED_ERR_VALUE_MSG); ISCRUTE_int(storagemode);goto ERROR; break; } SORTIE: _ret = _n; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COO); ISCRUTE_id(_dataset); } if (_datagroup4>0) if (_MEDdatagroupFermer(_datagroup4) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname4); ISCRUTE_id(_datagroup4); } 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); } /* _MEDobjetsOuverts(fid); */ *fret = _ret; va_end(params); return; }
med_err MEDindicesCoordEcr(med_idt fid,char *maillage,med_int mdim,med_float *indices, med_int n,med_int axe,char *comp,char *unit) { med_idt maaid, noeid, dataset; med_err ret; med_size dimd[1]; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; char nom_dataset[MED_TAILLE_NOM_ENTITE+1]; med_int att; med_maillage maillage_type; med_type_grille type; /* * Si axe > mdim => erreur */ if (axe > mdim) return -1; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur */ strcpy(chemin,MED_MAA); strcat(chemin,maillage); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Si le maillage est de type MED_NON_STRUCTURE => erreur */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_TYP,&att)) < 0) return -1; maillage_type = (med_maillage) att; if (maillage_type == MED_NON_STRUCTURE) return -1; /* * Si la grille n'est pas de type MED_GRILLE_CARTESIENNE ou * MED_GRILLE_POLAIRE => erreur */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_GTY,&att)) < 0) return -1; /* sizeof(enum) tjrs = sizeof(int) en C, or sur machines 64 bits par défaut med_int==long (normalement 64bits), du coup sur machines 64 bits _MEDattrEntierLire utilise le type hdf NATIVE_LONG, ce genere parfois un warning */ type = (med_type_grille) att; if ((type != MED_GRILLE_CARTESIENNE) && (type != MED_GRILLE_POLAIRE)) return -1; /* * Si le groupe HDF "NOE" n'existe pas => erreur */ if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0) if ((noeid = _MEDdatagroupCreer(maaid,MED_NOM_NOE)) < 0) return -1; /* * On ecrit le tableau d'indice dans un dataset HDF */ switch(axe) { case 1 : strcpy(nom_dataset,MED_NOM_IN1); break; case 2 : strcpy(nom_dataset,MED_NOM_IN2); break; case 3 : strcpy(nom_dataset,MED_NOM_IN3); break; default : return -1; } dimd[0] = n; if ((ret = _MEDdatasetNumEcrire(noeid,nom_dataset,MED_FLOAT64,MED_FULL_INTERLACE,1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0, MED_NOPG,dimd,(unsigned char*) indices)) < 0) return -1; /* * On re-ouvre le dataset HDF pour y placer des attributs */ if ((dataset = _MEDdatasetOuvrir(noeid,nom_dataset)) < 0) return -1; /* * Attribut NBR (taille du tableau d'indices) */ if ((ret = _MEDattrEntierEcrire(dataset,MED_NOM_NBR,&n)) < 0) return -1; /* * Attribut "NOM" (nom de la composante) */ if ((ret = _MEDattrStringEcrire(dataset,MED_NOM_NOM,MED_TAILLE_PNOM,comp)) < 0) return -1; /* * Attribut "UNI" (unite de la composante) */ if ((ret = _MEDattrStringEcrire(dataset,MED_NOM_UNI,MED_TAILLE_PNOM,unit)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if ((ret = _MEDdatagroupFermer(noeid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }
med_int MEDnEntMaa(med_idt fid, char *maa, med_table quoi, med_entite_maillage type_ent, med_geometrie_element type_geo, med_connectivite type_conn) { med_idt root=0, maaid=0, entid=0,geoid=0, dataset=0; med_int ret=-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]; med_int res = 0; 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) goto ERROR; /* * On met a jour le nom du Data Group representant * le type des entites */ if ( _MEDnomEntite(nom_ent,_type_ent) < 0) goto ERROR; /* * Si le Data Group des entites n'existe pas => res = 0 */ entid = _MEDdatagroupOuvrir(maaid,nom_ent); /* * Pour les mailles, les faces et le aretes * si le Data Group du type geometrique n'existe pas => res = 0 */ if ((_type_ent==MED_MAILLE)||(_type_ent==MED_FACE)||(_type_ent==MED_ARETE)) { if ( _MEDnomGeometrie30(nom_geo,type_geo) < 0) goto ERROR; geoid = _MEDdatagroupOuvrir(entid,nom_geo); } else geoid = -1; /* * Ouverture du Data Set renvoye par _MEDnomDataset() * S'il n'existe pas => erreur * Sinon lecture de l'attribut NBR */ if (geoid == -1) root = entid; else root = geoid; if ( _MEDnomDataset(nom_dataset,quoi,type_conn) < 0) goto ERROR; dataset = _MEDdatasetOuvrir(root,nom_dataset); if (dataset > 0) if ( _MEDattrEntierLire(dataset,MED_NOM_NBR,&res) < 0) goto ERROR; /* * On ferme tout */ ret=res; ERROR : if (dataset > 0) if ( _MEDdatasetFermer(dataset) < 0) ret=-1; if (geoid > 0) if ( _MEDdatagroupFermer(geoid) < 0) ret=-1; if (entid > 0) if ( _MEDdatagroupFermer(entid) < 0) ret=-1; if (maaid > 0) if ( _MEDdatagroupFermer(maaid) < 0) ret=-1; /*ICI;_MEDobjetsOuverts(fid);*/ return ret; }
void _MEDsubdomainCorrespondenceSizeInfo30(int dummy, ...) { med_err _ret=-1; med_idt _datagroup1=0,_dataset=0; int _num; char _path[MED_TAILLE_JNT+2*MED_NAME_SIZE+2+2*MED_MAX_PARA+1+4*MED_TAILLE_NOM_ENTITE+4]=MED_JNT; char _datagroupname1[2*MED_TAILLE_NOM_ENTITE+2]=""; char _cstpname[2*MED_MAX_PARA+1]=""; med_sorting_type _sortingtype=0; med_int _intlocalentitype; med_int _intlocalgeotype; med_int _intremoteentitype; med_int _intremotegeotype; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, char * , const , jointname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, int , , corit ); MED_VARGS_DECL(, med_entity_type *, const , localentitype ); MED_VARGS_DECL(, med_geometry_type *, const , localgeotype ); MED_VARGS_DECL(, med_entity_type *, const , remoteentitype ); MED_VARGS_DECL(, med_geometry_type *, const , remotegeotype ); MED_VARGS_DECL(, med_int *, const , nentitycor ); 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 , meshname ); MED_VARGS_DEF(const, char * , const , jointname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, int , , corit ); MED_VARGS_DEF(, med_entity_type *, const , localentitype ); MED_VARGS_DEF(, med_geometry_type *, const , localgeotype ); MED_VARGS_DEF(, med_entity_type *, const , remoteentitype ); MED_VARGS_DEF(, med_geometry_type *, const , remotegeotype ); MED_VARGS_DEF(, med_int *, const , nentitycor ); MED_VARGS_DEF(, med_err * ,, fret ); _num = corit -1; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if ( MEDmeshSortingTypeRd(fid,meshname,&_sortingtype) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd"); SSCRUTE(meshname);ISCRUTE_int(_sortingtype);goto ERROR; } strcat( _path, meshname); strcat( _path, "/"); strcat( _path, jointname); strcat( _path, "/"); _MEDgetComputationStepName(_sortingtype,numdt,numit,&_path[strlen(_path)]); strcat( _path, "/"); /* * On recupere le nom de <localentitype>[.<localgeotype>].<remoteentitype>[.<remotegeotype>] */ if ( _MEDobjectGetName(fid, _path ,_num, &_path[strlen(_path)]) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path);ISCRUTE_int(corit); goto ERROR; } if ( (_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /*lecture localentitype et localgeotype */ if (_MEDattrEntierLire(_datagroup1,MED_NOM_ENT,&_intlocalentitype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_ENT); ISCRUTE(_intlocalentitype);goto ERROR; } *localentitype = (med_entity_type) _intlocalentitype; if (_MEDattrEntierLire(_datagroup1,MED_NOM_GEO,&_intlocalgeotype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_GEO); ISCRUTE(_intlocalgeotype);goto ERROR; } *localgeotype = (med_geometry_type) _intlocalgeotype; /*lecture remoteentitype et remotegeotype */ if (_MEDattrEntierLire(_datagroup1,MED_NOM_END,&_intremoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_ENT); ISCRUTE(_intremoteentitype);goto ERROR; } *remoteentitype = (med_entity_type) _intremoteentitype; if (_MEDattrEntierLire(_datagroup1,MED_NOM_GED,&_intremotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_GEO); ISCRUTE(_intremotegeotype);goto ERROR; } *remotegeotype = (med_geometry_type) _intremotegeotype; if ((_dataset = _MEDdatasetOuvrir(_datagroup1,MED_NOM_COR)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path); goto ERROR; } if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,nentitycor) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_NBR);ISCRUTE(*nentitycor); goto ERROR; } _ret = 0; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR); ISCRUTE_id(_dataset); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_datagroup1); } va_end(params); *fret = _ret; return; }
void _MEDequivalenceCorrespondenceRd30(int dummy, ...) { med_idt _root=0,_eqid=0,_meshid=0,_cstpid=0,_datagroup2=0; med_idt _dataset=0; med_err _ret=-1; char _path[MED_TAILLE_EQS+2*MED_NAME_SIZE+2]=MED_EQS; char _computationstepname[2*MED_MAX_PARA+1]=""; char _datagroupname2[2*MED_TAILLE_NOM_ENTITE+2]=""; char _geotypename [MED_TAILLE_NOM_ENTITE+1]=""; med_sorting_type _sortingtype=0; med_filter _filter = MED_FILTER_INIT; med_geometry_type _geotype=MED_NONE; med_int _nentity=0; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, char * , const , equivname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , entitype ); MED_VARGS_DECL(const, med_geometry_type , , geotype ); MED_VARGS_DECL(, med_int *, const , correspondence ); 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 , meshname ); MED_VARGS_DEF(const, char * , const , equivname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , entitype ); MED_VARGS_DEF(const, med_geometry_type , , geotype ); MED_VARGS_DEF(, med_int *, const , correspondence ); MED_VARGS_DEF(, med_err * ,, fret ); if ( entitype == MED_NODE_ELEMENT ) _geotype=MED_NODE ; if ( (geotype / 100 ) > 2 ) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GEOMETRIC,MED_ERR_EQUIVALENCE_MSG); SSCRUTE(equivname);ISCRUTE_int(geotype); goto ERROR; } if ( entitype != MED_NODE ) _geotype=geotype ; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); /* * Ouverture du dataGroup /EQS/ */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* * Ouverture du dataGroup <meshname> */ if ((_meshid = _MEDdatagroupOuvrir(_root,meshname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,meshname); SSCRUTE(_path);goto ERROR; } strcat(_path,meshname); /* * Si le Data Group "/EQS/<meshname>/<equivname>" n'existe pas, on le cree */ if ((_eqid = _MEDdatagroupOuvrir(_meshid,equivname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,equivname); SSCRUTE(_path);goto ERROR; } strcat(_path,"/"); strcat(_path,equivname); if ( MEDmeshSortingTypeRd(fid,meshname,&_sortingtype) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd"); SSCRUTE(meshname);ISCRUTE_int(_sortingtype);goto ERROR; } _MEDgetComputationStepName(_sortingtype,numdt,numit,_computationstepname); if ((_cstpid = _MEDdatagroupOuvrir(_eqid,_computationstepname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_computationstepname); SSCRUTE(_path);goto ERROR; } /* * Ouverture du datagroup de niveau <entitype>[.<geotype>] */ if (_MEDgetEntityTypeName(_datagroupname2,entitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(entitype);SSCRUTE(equivname);goto ERROR; } if ( entitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(_geotypename,geotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(geotype);SSCRUTE(equivname);goto ERROR; } strcat(_datagroupname2,"."); strcat(_datagroupname2,_geotypename); } if ( (_datagroup2 = _MEDdatagroupOuvrir(_cstpid,_datagroupname2)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_datagroupname2); SSCRUTE(_path);SSCRUTE(equivname);goto ERROR; } if ((_dataset = _MEDdatasetOuvrir(_datagroup2,MED_NOM_COR)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2); goto ERROR; } if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,&_nentity) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_EQUIVALENCE_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2); SSCRUTE(MED_NOM_NBR);ISCRUTE(_nentity);goto ERROR; } if ( MEDfilterEntityCr(fid, _nentity, 1, 2, MED_ALL_CONSTITUENT, MED_NO_INTERLACE,MED_UNDEF_PFLMODE, MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG); goto ERROR; } if ( _MEDdatasetRd(_datagroup2,MED_NOM_COR,MED_INTERNAL_INT,&_filter, (unsigned char *) correspondence) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ( MEDfilterClose(&_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_EQUIVALENCE_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } _ret=0; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR); ISCRUTE_id(_dataset); } if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2); ISCRUTE_id(_datagroup2);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); } if (_cstpid>0) if (_MEDdatagroupFermer(_cstpid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_computationstepname); ISCRUTE_id(_cstpid);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); } if (_eqid>0) if (_MEDdatagroupFermer(_eqid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,equivname); ISCRUTE_id(_eqid);SSCRUTE(_path); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,meshname); ISCRUTE_id(_eqid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_EQS); ISCRUTE_id(_eqid); } va_end(params); *fret = _ret; return; }
med_err MEDsubdomainCorrespondenceWr(const med_idt fid, const char * const localmeshname, const char * const jointname, const med_int numdt, const med_int numit, const med_entity_type localentitype, const med_geometry_type localgeotype, const med_entity_type remoteentitype, const med_geometry_type remotegeotype, const med_int nentity, const med_int * const correspondence) { med_access_mode _MED_ACCESS_MODE; med_idt _root=0,_jntid=0,_meshid=0,_cstpid=0,_datagroup2=0; med_idt _dataset=0; med_err _ret=-1; char _path[MED_TAILLE_JNT+2*MED_NAME_SIZE+2]=MED_JNT; char _computationstepname[2*MED_MAX_PARA+1]=""; char _datagroupname2[4*MED_TAILLE_NOM_ENTITE+4]=""; char _localgeotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _remotegeotypename [MED_TAILLE_NOM_ENTITE+1]=""; med_sorting_type _sortingtype=0; med_filter _filter = MED_FILTER_INIT; med_int _localgeotype = MED_NONE; med_int _localentitype = localentitype; med_int _remotegeotype = MED_NONE; med_int _remoteentitype = remoteentitype; if ( localentitype == MED_NODE_ELEMENT ) _localgeotype=MED_NODE ; if ( localentitype != MED_NODE ) _localgeotype = localgeotype ; if ( remoteentitype != MED_NODE ) _remotegeotype = remotegeotype ; /* * 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; } /* * Ouverture du dataGroup /JNT/ */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* * Ouverture du dataGroup <meshname> */ if ((_meshid = _MEDdatagroupOuvrir(_root,localmeshname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,localmeshname); SSCRUTE(_path);goto ERROR; } strcat(_path,localmeshname); /* * Ouverture du data Group "/JNT/<localmeshname>/<jointname>" */ if ((_jntid = _MEDdatagroupOuvrir(_meshid,jointname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,jointname); SSCRUTE(_path);goto ERROR; } strcat(_path,"/"); strcat(_path,jointname); if ( MEDmeshSortingTypeRd(fid,localmeshname,&_sortingtype) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd"); SSCRUTE(localmeshname);ISCRUTE_int(_sortingtype);goto ERROR; } _MEDgetComputationStepName(_sortingtype,numdt,numit,_computationstepname); if ((_cstpid = _MEDdatagroupOuvrir(_jntid,_computationstepname)) < 0) if ((_cstpid = _MEDdatagroupCreer(_jntid,_computationstepname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_computationstepname); SSCRUTE(_path);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_NDT pour �criture */ if ( _MEDattributeIntWr(_cstpid,MED_NOM_NDT,&numdt) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_NOR pour �criture */ if ( _MEDattributeIntWr(_cstpid,MED_NOM_NOR,&numit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } /* * Creation/Ouverture du datagroup de niveau * <localentitype>[.<localgeotype>].<remoteentitype>[.<remotegeotype>] */ if (_MEDgetEntityTypeName(_datagroupname2,localentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(localentitype);SSCRUTE(jointname);goto ERROR; } if ( localentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(_localgeotypename,localgeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(localgeotype);SSCRUTE(jointname);goto ERROR; } strcat(_datagroupname2,"."); strcat(_datagroupname2,_localgeotypename); } strcat(_datagroupname2,"."); if (_MEDgetEntityTypeName(&_datagroupname2[strlen(_datagroupname2)],remoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(remoteentitype);SSCRUTE(jointname);goto ERROR; } if ( remoteentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(_remotegeotypename,remotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(remotegeotype);SSCRUTE(jointname);goto ERROR; } strcat(_datagroupname2,"."); strcat(_datagroupname2,_remotegeotypename); } if ( (_datagroup2 = _MEDdatagroupOuvrir(_cstpid,_datagroupname2)) < 0) if ((_datagroup2 = _MEDdatagroupCreer(_cstpid,_datagroupname2)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2); SSCRUTE(_path);SSCRUTE(jointname);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_ENT pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_ENT,&_localentitype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_ENT); ISCRUTE(_localentitype);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_GEO pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_GEO,&_localgeotype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GEO); ISCRUTE(_localgeotype);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_END pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_END,&_remoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_END); ISCRUTE(_remoteentitype);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_GED pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_GED,&_remotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GED); ISCRUTE(_remotegeotype);goto ERROR; } if ( MEDfilterEntityCr(fid, nentity, 1, 2, MED_ALL_CONSTITUENT, MED_NO_INTERLACE,MED_UNDEF_PFLMODE, MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG); goto ERROR; } if ( _MEDdatasetWr(_datagroup2,MED_NOM_COR,MED_INTERNAL_INT,&_filter, correspondence) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ( MEDfilterClose(&_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ((_dataset = _MEDdatasetOuvrir(_datagroup2,MED_NOM_COR)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2); goto ERROR; } if ( _MEDattributeIntWr(_dataset,MED_NOM_NBR,&nentity) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2); SSCRUTE(MED_NOM_NBR);ISCRUTE(nentity);goto ERROR; } _ret=0; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR); ISCRUTE_id(_dataset); } if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2); ISCRUTE_id(_datagroup2);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); } if (_cstpid>0) if (_MEDdatagroupFermer(_cstpid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_computationstepname); ISCRUTE_id(_cstpid);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); } if (_jntid>0) if (_MEDdatagroupFermer(_jntid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,jointname); ISCRUTE_id(_jntid);SSCRUTE(_path); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,localmeshname); ISCRUTE_id(_meshid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_JNT); ISCRUTE_id(_root); } return _ret; }
med_err MEDindicesCoordLire(med_idt fid,char *maillage,med_int mdim,med_float *indices, med_int n,med_int axe,char *comp,char *unit) { med_idt maaid, noeid, dataset; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; char nom_dataset[MED_TAILLE_NOM_ENTITE+1]; med_int att; med_maillage maillage_type; med_type_grille type; /* * Si axe > mdim => erreur */ if (axe > mdim) return -1; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur */ strcpy(chemin,MED_MAA); strcat(chemin,maillage); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Si le maillage est de type MED_NON_STRUCTURE => erreur */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_TYP,&att)) < 0) return -1; maillage_type = (med_maillage) att; if (maillage_type == MED_NON_STRUCTURE) return -1; /* * Si la grille n'est pas de type MED_GRILLE_CARTESIENNE ou * MED_GRILLE_POLAIRE => erreur */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_GTY,&att)) < 0) return -1; type = (med_type_grille) att; if ((type != MED_GRILLE_CARTESIENNE) && (type != MED_GRILLE_POLAIRE)) return -1; /* * Si le groupe HDF "NOE" n'existe pas => erreur */ if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0) return -1; /* * On ecrit le tableau d'indice dans un dataset HDF */ switch(axe) { case 1 : strcpy(nom_dataset,MED_NOM_IN1); break; case 2 : strcpy(nom_dataset,MED_NOM_IN2); break; case 3 : strcpy(nom_dataset,MED_NOM_IN3); break; default : return -1; } if ((ret = _MEDdatasetNumLire(noeid,nom_dataset,MED_FLOAT64,MED_FULL_INTERLACE,1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,MED_PFL_NON_COMPACT,0, MED_NOPG,0,(unsigned char*) indices)) < 0) return -1; /* * On re-ouvre le dataset HDF pour y placer des attributs */ if ((dataset = _MEDdatasetOuvrir(noeid,nom_dataset)) < 0) return -1; /* * Attribut "NOM" (nom de la composante) */ if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,MED_TAILLE_PNOM,comp)) < 0) return -1; /* * Attribut "UNI" (unite de la composante) */ if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,MED_TAILLE_PNOM,unit)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if ((ret = _MEDdatagroupFermer(noeid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }
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; }
med_err MEDmeshNodeCoordinateWr(const med_idt fid, const char* const meshname, const med_int numdt, const med_int numit, const med_float dt, const med_switch_mode switchmode, const med_int nentity, const med_float* const coordinate) { med_idt _meshid = 0; med_idt _datagroup1=0,_datagroup2=0,_datagroup3=0,_datagroup_trsf=0; med_idt _dataset_trsf = 0; med_err _ret = -1; med_grid_type _gridtype = MED_UNDEF_GRID_TYPE; med_int _intgridtype = 0; med_int _intmeshtype = 0; med_int _meshdim = 0; char _meshpath [MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1]=""; char _geotypename[MED_TAILLE_NOM_ENTITE+1]=""; char _datagroup_trsfname[MED_TAILLE_NOM_ENTITE+MED_TAILLE_COOTRF+1]=MED_NOM_NOE MED_COOTRF; int _i=0; med_bool _isasupportmesh=MED_FALSE,_isasoftlink=MED_FALSE; med_int _0 = 0; med_int _medintgeotype = MED_NO_GEOTYPE; if (_MEDcheckVersion30(fid) < 0) goto ERROR; /* Ouverture du maillage de calcul ou du maillage support */ 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; } /* Lecture du type de maillage (attribut MED_NOM_TYP) */ if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR; } /*Sortir en erreur si maillage support et numdt,numit != MED_NO_PDT,MED_NO_IT*/ /* Accès (création éventuelle) du datagroup numdt,numit */ if ( _isasupportmesh ) { if (( numdt != MED_NO_DT) && (numit != MED_NO_IT) ) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numdt);ISCRUTE(numit);goto ERROR; } } else if ( (_datagroup1 =_MEDmeshAssociatedGroupCr(fid, MED_MAA, meshname, numdt, numit, dt,MED_FALSE, "." ) ) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAssociatedGroupCr"); goto ERROR; } /* Création de la structure de connectivité assoiciée aux grilles MED_CURVILLINEAR_GRID*/ if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) { /* Lecture de l'attribut MED_NOM_GTY */ if (_MEDattrEntierLire(_meshid,MED_NOM_GTY,&_intgridtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);ISCRUTE_int(_gridtype);goto ERROR; } _gridtype= (med_grid_type) _intgridtype; if ( _gridtype == MED_CURVILINEAR_GRID ) { if ((_datagroup2 = _MEDdatagroupOuvrir(_datagroup1,MED_NOM_MAI)) < 0) { if ((_datagroup2 = _MEDdatagroupCreer(_datagroup1,MED_NOM_MAI)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_NOM_MAI); SSCRUTE(meshname);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ( _MEDattributeIntWr(_datagroup2,MED_NOM_CGT,&_0) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(MED_NOM_CGT); goto ERROR; } /* Lecture de l'attribut MED_NOM_DIM */ if (_MEDattrEntierLire(_meshid,MED_NOM_DIM,&_meshdim) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_DIM);ISCRUTE(_meshdim);goto ERROR; } switch ( _meshdim ) { case 1 : strcpy(_geotypename,MED_NOM_SE2); _medintgeotype = MED_SEG2; break; case 2 : strcpy(_geotypename,MED_NOM_QU4); _medintgeotype = MED_QUAD4; break; case 3 : strcpy(_geotypename,MED_NOM_HE8); break; _medintgeotype = MED_HEXA8; case 0 : strcpy(_geotypename,MED_NOM_PO1); _medintgeotype = MED_POINT1; break; default : MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_PARAMETER,""); SSCRUTE(meshname);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ((_datagroup3 = _MEDdatagroupCreer(_datagroup2,_geotypename)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_geotypename); SSCRUTE(meshname);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ( _MEDattributeStringWr(_datagroup3,MED_NOM_PFL,MED_NAME_SIZE,MED_NO_PROFILE_INTERNAL) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); goto ERROR; } if ( _MEDattributeIntWr(_datagroup3,MED_NOM_CGT,&_0) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(MED_NOM_CGT); goto ERROR; } if ( _MEDattributeIntWr(_datagroup3,MED_NOM_CGS,&_0) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(MED_NOM_CGS); goto ERROR; } if (_MEDattributeIntWr(_datagroup3,MED_NOM_GEO,&_medintgeotype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GEO); ISCRUTE(_medintgeotype); goto ERROR; } } } else { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GRIDTYPE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);ISCRUTE_int(_gridtype);goto ERROR; } } /*Réinitialisation du lien MED_TRSF_NOM/MED_COORDINATE_TRSF s'il existe */ /*Si un dataset de transformation existe une erreur est générée par _MEDsoftlinkDel */ if ( !_isasupportmesh) if ((_datagroup_trsf = _MEDdatagroupOuvrir(_datagroup1,_datagroup_trsfname)) > 0) { if ( _MEDisasoftlink(_datagroup_trsf, MED_NOM_TRF,MED_FALSE, &_isasoftlink ) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_LINK,MED_NOM_COO); goto ERROR; } if (_isasoftlink ) { if ( _MEDsoftlinkDel(_datagroup_trsf, MED_NOM_TRF, MED_TRUE) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDsoftlinkDel"); goto ERROR; } } else { if ( (_dataset_trsf = _MEDdatasetOuvrir(_datagroup_trsf,MED_NOM_TRF)) >= 0 ) { _MEDdatasetFermer(_dataset_trsf); MED_ERR_(_ret,MED_ERR_NULL,MED_ERR_DATASET,MED_NOM_TRF); goto ERROR; } } } /*Ecriture des coordonnées*/ if ( _MEDmeshAdvancedWr(fid, meshname, MED_COORDINATE, MED_NO_NAME, MED_INTERNAL_UNDEF, numdt, numit, dt, MED_NODE, MED_NONE, MED_NO_CMODE, MED_UNDEF_PFLMODE, MED_NO_PROFILE, switchmode, MED_ALL_CONSTITUENT, NULL, nentity, coordinate) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAdvancedWr"); goto ERROR; } _ret = 0; ERROR: if (_datagroup_trsf>0) if (_MEDdatagroupFermer(_datagroup_trsf) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroup_trsfname); ISCRUTE_id(_datagroup_trsf); } if (_datagroup3>0) if (_MEDdatagroupFermer(_datagroup3) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_geotypename); ISCRUTE_id(_datagroup3); } if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_NOM_MAI); ISCRUTE_id(_datagroup2); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_datagroup1);ISCRUTE(numdt);ISCRUTE(numit); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,meshname); ISCRUTE_id(_meshid); } return _ret; }
med_err MEDmeshNodeCoordinateAdvancedWr(const med_idt fid, const char* const meshname, const med_int numdt, const med_int numit, const med_float dt, const med_filter * const filter, const med_float* const coordinate) { med_err _ret = -1; med_idt _meshid = 0,_datagroup1=0,_datagroup_trsf=0; med_idt _dataset_trsf = 0; med_int _intmeshtype = 0; char _meshpath [MED_MESH_SUPPORT_GRP_SIZE+MED_NAME_SIZE+1]=""; char _datagroup_trsfname[MED_TAILLE_NOM_ENTITE+MED_TAILLE_COOTRF+1]=MED_NOM_NOE MED_COOTRF; med_bool _isasupportmesh=MED_FALSE,_isasoftlink=MED_FALSE; if (_MEDcheckVersion30(fid) < 0) goto ERROR; /* Maillage de calcul ou maillage support */ 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; } /* Lecture de l'attribut du type de maillage MED_NOM_TYP */ if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR; } if ( _isasupportmesh ) { if (( numdt != MED_NO_DT) && (numit != MED_NO_IT) ) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numdt);ISCRUTE(numit);goto ERROR; } } else if ( (_datagroup1 =_MEDmeshAssociatedGroupCr(fid, MED_MESH_GRP, meshname, numdt, numit, dt, MED_FALSE, "." ) ) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAssociatedGroupCr"); goto ERROR; } /*Réinitialisation du lien MED_TRSF_NOM/MED_COORDINATE_TRSF s'il existe */ /*Si un dataset de transformation existe une erreur est générée par _MEDsoftlinkDel */ /*Réinitialisation du lien MED_TRSF_NOM/MED_COORDINATE_TRSF s'il existe */ /*Si un dataset de transformation existe une erreur est générée par _MEDsoftlinkDel */ if ( !_isasupportmesh) if ((_datagroup_trsf = _MEDdatagroupOuvrir(_datagroup1,_datagroup_trsfname)) > 0) { if ( _MEDisasoftlink(_datagroup_trsf, MED_NOM_TRF,MED_FALSE, &_isasoftlink ) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_LINK,MED_NOM_COO); goto ERROR; } if (_isasoftlink ) { if ( _MEDsoftlinkDel(_datagroup_trsf, MED_NOM_TRF, MED_TRUE) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDsoftlinkDel"); goto ERROR; } } else { if ( (_dataset_trsf = _MEDdatasetOuvrir(_datagroup_trsf,MED_NOM_TRF)) >= 0 ) { _MEDdatasetFermer(_dataset_trsf); MED_ERR_(_ret,MED_ERR_NULL,MED_ERR_DATASET,MED_NOM_TRF); goto ERROR; } } } if ( ( (med_mesh_type) _intmeshtype ) == MED_UNSTRUCTURED_MESH ) { if ( _MEDmeshAdvancedWr(fid, meshname, MED_COORDINATE, MED_NO_NAME, MED_INTERNAL_UNDEF, numdt, numit, dt, MED_NODE, MED_NONE, MED_NO_CMODE, MED_UNDEF_STMODE, MED_NO_PROFILE, MED_UNDEF_INTERLACE, MED_ALL_CONSTITUENT, filter, MED_UNDEF_SIZE, coordinate) <0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAdvancedWr"); goto ERROR; } } else { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_MESHTYPE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);goto ERROR; } _ret = 0; ERROR: if (_datagroup_trsf>0) if (_MEDdatagroupFermer(_datagroup_trsf) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroup_trsfname); ISCRUTE_id(_datagroup_trsf); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_datagroup1);ISCRUTE(numdt);ISCRUTE(numit); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,meshname); ISCRUTE_id(_meshid); } return _ret; }